1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | exports = module.exports = debug;
|
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 |
|
20 | exports.names = [];
|
21 | exports.skips = [];
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | exports.formatters = {};
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 | var prevColor = 0;
|
36 |
|
37 |
|
38 |
|
39 |
|
40 |
|
41 | var prevTime;
|
42 |
|
43 |
|
44 |
|
45 |
|
46 |
|
47 |
|
48 |
|
49 |
|
50 | function selectColor() {
|
51 | return exports.colors[prevColor++ % exports.colors.length];
|
52 | }
|
53 |
|
54 |
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 | function debug(namespace) {
|
63 |
|
64 |
|
65 | function disabled() {
|
66 | }
|
67 | disabled.enabled = false;
|
68 |
|
69 |
|
70 | function enabled() {
|
71 |
|
72 | var self = enabled;
|
73 |
|
74 |
|
75 | var curr = +new Date();
|
76 | var ms = curr - (prevTime || curr);
|
77 | self.diff = ms;
|
78 | self.prev = prevTime;
|
79 | self.curr = curr;
|
80 | prevTime = curr;
|
81 |
|
82 |
|
83 | if (null == self.useColors) self.useColors = exports.useColors();
|
84 | if (null == self.color && self.useColors) self.color = selectColor();
|
85 |
|
86 | var args = Array.prototype.slice.call(arguments);
|
87 |
|
88 | args[0] = exports.coerce(args[0]);
|
89 |
|
90 | if ('string' !== typeof args[0]) {
|
91 |
|
92 | args = ['%o'].concat(args);
|
93 | }
|
94 |
|
95 |
|
96 | var index = 0;
|
97 | args[0] = args[0].replace(/%([a-z%])/g, function(match, format) {
|
98 |
|
99 | if (match === '%%') return match;
|
100 | index++;
|
101 | var formatter = exports.formatters[format];
|
102 | if ('function' === typeof formatter) {
|
103 | var val = args[index];
|
104 | match = formatter.call(self, val);
|
105 |
|
106 |
|
107 | args.splice(index, 1);
|
108 | index--;
|
109 | }
|
110 | return match;
|
111 | });
|
112 |
|
113 | if ('function' === typeof exports.formatArgs) {
|
114 | args = exports.formatArgs.apply(self, args);
|
115 | }
|
116 | var logFn = enabled.log || exports.log || console.log.bind(console);
|
117 | logFn.apply(self, args);
|
118 | }
|
119 | enabled.enabled = true;
|
120 |
|
121 | var fn = exports.enabled(namespace) ? enabled : disabled;
|
122 |
|
123 | fn.namespace = namespace;
|
124 |
|
125 | return fn;
|
126 | }
|
127 |
|
128 |
|
129 |
|
130 |
|
131 |
|
132 |
|
133 |
|
134 |
|
135 |
|
136 | function enable(namespaces) {
|
137 | exports.save(namespaces);
|
138 |
|
139 | var split = (namespaces || '').split(/[\s,]+/);
|
140 | var len = split.length;
|
141 |
|
142 | for (var i = 0; i < len; i++) {
|
143 | if (!split[i]) continue;
|
144 | namespaces = split[i].replace(/\*/g, '.*?');
|
145 | if (namespaces[0] === '-') {
|
146 | exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$'));
|
147 | } else {
|
148 | exports.names.push(new RegExp('^' + namespaces + '$'));
|
149 | }
|
150 | }
|
151 | }
|
152 |
|
153 |
|
154 |
|
155 |
|
156 |
|
157 |
|
158 |
|
159 | function disable() {
|
160 | exports.enable('');
|
161 | }
|
162 |
|
163 |
|
164 |
|
165 |
|
166 |
|
167 |
|
168 |
|
169 |
|
170 |
|
171 | function enabled(name) {
|
172 | var i, len;
|
173 | for (i = 0, len = exports.skips.length; i < len; i++) {
|
174 | if (exports.skips[i].test(name)) {
|
175 | return false;
|
176 | }
|
177 | }
|
178 | for (i = 0, len = exports.names.length; i < len; i++) {
|
179 | if (exports.names[i].test(name)) {
|
180 | return true;
|
181 | }
|
182 | }
|
183 | return false;
|
184 | }
|
185 |
|
186 |
|
187 |
|
188 |
|
189 |
|
190 |
|
191 |
|
192 |
|
193 |
|
194 | function coerce(val) {
|
195 | if (val instanceof Error) return val.stack || val.message;
|
196 | return val;
|
197 | }
|