1 | diff --git a/lib/util.js b/lib/util.js
|
2 | index a03e874..9074e8e 100644
|
3 |
|
4 |
|
5 | @@ -19,430 +19,6 @@
|
6 | // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
7 | // USE OR OTHER DEALINGS IN THE SOFTWARE.
|
8 |
|
9 | -var formatRegExp = /%[sdj%]/g;
|
10 | -exports.format = function(f) {
|
11 | - if (!isString(f)) {
|
12 | - var objects = [];
|
13 | - for (var i = 0; i < arguments.length; i++) {
|
14 | - objects.push(inspect(arguments[i]));
|
15 | - }
|
16 | - return objects.join(' ');
|
17 | - }
|
18 | -
|
19 | - var i = 1;
|
20 | - var args = arguments;
|
21 | - var len = args.length;
|
22 | - var str = String(f).replace(formatRegExp, function(x) {
|
23 | - if (x === '%%') return '%';
|
24 | - if (i >= len) return x;
|
25 | - switch (x) {
|
26 | - case '%s': return String(args[i++]);
|
27 | - case '%d': return Number(args[i++]);
|
28 | - case '%j':
|
29 | - try {
|
30 | - return JSON.stringify(args[i++]);
|
31 | - } catch (_) {
|
32 | - return '[Circular]';
|
33 | - }
|
34 | - default:
|
35 | - return x;
|
36 | - }
|
37 | - });
|
38 | - for (var x = args[i]; i < len; x = args[++i]) {
|
39 | - if (isNull(x) || !isObject(x)) {
|
40 | - str += ' ' + x;
|
41 | - } else {
|
42 | - str += ' ' + inspect(x);
|
43 | - }
|
44 | - }
|
45 | - return str;
|
46 | -};
|
47 | -
|
48 | -
|
49 | -// Mark that a method should not be used.
|
50 | -// Returns a modified function which warns once by default.
|
51 | -// If --no-deprecation is set, then it is a no-op.
|
52 | -exports.deprecate = function(fn, msg) {
|
53 | - // Allow for deprecating things in the process of starting up.
|
54 | - if (isUndefined(global.process)) {
|
55 | - return function() {
|
56 | - return exports.deprecate(fn, msg).apply(this, arguments);
|
57 | - };
|
58 | - }
|
59 | -
|
60 | - if (process.noDeprecation === true) {
|
61 | - return fn;
|
62 | - }
|
63 | -
|
64 | - var warned = false;
|
65 | - function deprecated() {
|
66 | - if (!warned) {
|
67 | - if (process.throwDeprecation) {
|
68 | - throw new Error(msg);
|
69 | - } else if (process.traceDeprecation) {
|
70 | - console.trace(msg);
|
71 | - } else {
|
72 | - console.error(msg);
|
73 | - }
|
74 | - warned = true;
|
75 | - }
|
76 | - return fn.apply(this, arguments);
|
77 | - }
|
78 | -
|
79 | - return deprecated;
|
80 | -};
|
81 | -
|
82 | -
|
83 | -var debugs = {};
|
84 | -var debugEnviron;
|
85 | -exports.debuglog = function(set) {
|
86 | - if (isUndefined(debugEnviron))
|
87 | - debugEnviron = process.env.NODE_DEBUG || '';
|
88 | - set = set.toUpperCase();
|
89 | - if (!debugs[set]) {
|
90 | - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
|
91 | - var pid = process.pid;
|
92 | - debugs[set] = function() {
|
93 | - var msg = exports.format.apply(exports, arguments);
|
94 | - console.error('%s %d: %s', set, pid, msg);
|
95 | - };
|
96 | - } else {
|
97 | - debugs[set] = function() {};
|
98 | - }
|
99 | - }
|
100 | - return debugs[set];
|
101 | -};
|
102 | -
|
103 | -
|
104 | -/**
|
105 | - * Echos the value of a value. Trys to print the value out
|
106 | - * in the best way possible given the different types.
|
107 | - *
|
108 | - * @param {Object} obj The object to print out.
|
109 | - * @param {Object} opts Optional options object that alters the output.
|
110 | - */
|
111 | -/* legacy: obj, showHidden, depth, colors*/
|
112 | -function inspect(obj, opts) {
|
113 | - // default options
|
114 | - var ctx = {
|
115 | - seen: [],
|
116 | - stylize: stylizeNoColor
|
117 | - };
|
118 | - // legacy...
|
119 | - if (arguments.length >= 3) ctx.depth = arguments[2];
|
120 | - if (arguments.length >= 4) ctx.colors = arguments[3];
|
121 | - if (isBoolean(opts)) {
|
122 | - // legacy...
|
123 | - ctx.showHidden = opts;
|
124 | - } else if (opts) {
|
125 | - // got an "options" object
|
126 | - exports._extend(ctx, opts);
|
127 | - }
|
128 | - // set default options
|
129 | - if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
|
130 | - if (isUndefined(ctx.depth)) ctx.depth = 2;
|
131 | - if (isUndefined(ctx.colors)) ctx.colors = false;
|
132 | - if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
|
133 | - if (ctx.colors) ctx.stylize = stylizeWithColor;
|
134 | - return formatValue(ctx, obj, ctx.depth);
|
135 | -}
|
136 | -exports.inspect = inspect;
|
137 | -
|
138 | -
|
139 | -// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
|
140 | -inspect.colors = {
|
141 | - 'bold' : [1, 22],
|
142 | - 'italic' : [3, 23],
|
143 | - 'underline' : [4, 24],
|
144 | - 'inverse' : [7, 27],
|
145 | - 'white' : [37, 39],
|
146 | - 'grey' : [90, 39],
|
147 | - 'black' : [30, 39],
|
148 | - 'blue' : [34, 39],
|
149 | - 'cyan' : [36, 39],
|
150 | - 'green' : [32, 39],
|
151 | - 'magenta' : [35, 39],
|
152 | - 'red' : [31, 39],
|
153 | - 'yellow' : [33, 39]
|
154 | -};
|
155 | -
|
156 | -// Don't use 'blue' not visible on cmd.exe
|
157 | -inspect.styles = {
|
158 | - 'special': 'cyan',
|
159 | - 'number': 'yellow',
|
160 | - 'boolean': 'yellow',
|
161 | - 'undefined': 'grey',
|
162 | - 'null': 'bold',
|
163 | - 'string': 'green',
|
164 | - 'date': 'magenta',
|
165 | - // "name": intentionally not styling
|
166 | - 'regexp': 'red'
|
167 | -};
|
168 | -
|
169 | -
|
170 | -function stylizeWithColor(str, styleType) {
|
171 | - var style = inspect.styles[styleType];
|
172 | -
|
173 | - if (style) {
|
174 | - return '\u001b[' + inspect.colors[style][0] + 'm' + str +
|
175 | - '\u001b[' + inspect.colors[style][1] + 'm';
|
176 | - } else {
|
177 | - return str;
|
178 | - }
|
179 | -}
|
180 | -
|
181 | -
|
182 | -function stylizeNoColor(str, styleType) {
|
183 | - return str;
|
184 | -}
|
185 | -
|
186 | -
|
187 | -function arrayToHash(array) {
|
188 | - var hash = {};
|
189 | -
|
190 | - array.forEach(function(val, idx) {
|
191 | - hash[val] = true;
|
192 | - });
|
193 | -
|
194 | - return hash;
|
195 | -}
|
196 | -
|
197 | -
|
198 | -function formatValue(ctx, value, recurseTimes) {
|
199 | - // Provide a hook for user-specified inspect functions.
|
200 | - // Check that value is an object with an inspect function on it
|
201 | - if (ctx.customInspect &&
|
202 | - value &&
|
203 | - isFunction(value.inspect) &&
|
204 | - // Filter out the util module, it's inspect function is special
|
205 | - value.inspect !== exports.inspect &&
|
206 | - // Also filter out any prototype objects using the circular check.
|
207 | - !(value.constructor && value.constructor.prototype === value)) {
|
208 | - var ret = value.inspect(recurseTimes, ctx);
|
209 | - if (!isString(ret)) {
|
210 | - ret = formatValue(ctx, ret, recurseTimes);
|
211 | - }
|
212 | - return ret;
|
213 | - }
|
214 | -
|
215 | - // Primitive types cannot have properties
|
216 | - var primitive = formatPrimitive(ctx, value);
|
217 | - if (primitive) {
|
218 | - return primitive;
|
219 | - }
|
220 | -
|
221 | - // Look up the keys of the object.
|
222 | - var keys = Object.keys(value);
|
223 | - var visibleKeys = arrayToHash(keys);
|
224 | -
|
225 | - if (ctx.showHidden) {
|
226 | - keys = Object.getOwnPropertyNames(value);
|
227 | - }
|
228 | -
|
229 | - // Some type of object without properties can be shortcutted.
|
230 | - if (keys.length === 0) {
|
231 | - if (isFunction(value)) {
|
232 | - var name = value.name ? ': ' + value.name : '';
|
233 | - return ctx.stylize('[Function' + name + ']', 'special');
|
234 | - }
|
235 | - if (isRegExp(value)) {
|
236 | - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
237 | - }
|
238 | - if (isDate(value)) {
|
239 | - return ctx.stylize(Date.prototype.toString.call(value), 'date');
|
240 | - }
|
241 | - if (isError(value)) {
|
242 | - return formatError(value);
|
243 | - }
|
244 | - }
|
245 | -
|
246 | - var base = '', array = false, braces = ['{', '}'];
|
247 | -
|
248 | - // Make Array say that they are Array
|
249 | - if (isArray(value)) {
|
250 | - array = true;
|
251 | - braces = ['[', ']'];
|
252 | - }
|
253 | -
|
254 | - // Make functions say that they are functions
|
255 | - if (isFunction(value)) {
|
256 | - var n = value.name ? ': ' + value.name : '';
|
257 | - base = ' [Function' + n + ']';
|
258 | - }
|
259 | -
|
260 | - // Make RegExps say that they are RegExps
|
261 | - if (isRegExp(value)) {
|
262 | - base = ' ' + RegExp.prototype.toString.call(value);
|
263 | - }
|
264 | -
|
265 | - // Make dates with properties first say the date
|
266 | - if (isDate(value)) {
|
267 | - base = ' ' + Date.prototype.toUTCString.call(value);
|
268 | - }
|
269 | -
|
270 | - // Make error with message first say the error
|
271 | - if (isError(value)) {
|
272 | - base = ' ' + formatError(value);
|
273 | - }
|
274 | -
|
275 | - if (keys.length === 0 && (!array || value.length == 0)) {
|
276 | - return braces[0] + base + braces[1];
|
277 | - }
|
278 | -
|
279 | - if (recurseTimes < 0) {
|
280 | - if (isRegExp(value)) {
|
281 | - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
|
282 | - } else {
|
283 | - return ctx.stylize('[Object]', 'special');
|
284 | - }
|
285 | - }
|
286 | -
|
287 | - ctx.seen.push(value);
|
288 | -
|
289 | - var output;
|
290 | - if (array) {
|
291 | - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
|
292 | - } else {
|
293 | - output = keys.map(function(key) {
|
294 | - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
|
295 | - });
|
296 | - }
|
297 | -
|
298 | - ctx.seen.pop();
|
299 | -
|
300 | - return reduceToSingleString(output, base, braces);
|
301 | -}
|
302 | -
|
303 | -
|
304 | -function formatPrimitive(ctx, value) {
|
305 | - if (isUndefined(value))
|
306 | - return ctx.stylize('undefined', 'undefined');
|
307 | - if (isString(value)) {
|
308 | - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
|
309 | - .replace(/'/g, "\\'")
|
310 | - .replace(/\\"/g, '"') + '\'';
|
311 | - return ctx.stylize(simple, 'string');
|
312 | - }
|
313 | - if (isNumber(value)) {
|
314 | - // Format -0 as '-0'. Strict equality won't distinguish 0 from -0,
|
315 | - // so instead we use the fact that 1 / -0 < 0 whereas 1 / 0 > 0 .
|
316 | - if (value === 0 && 1 / value < 0)
|
317 | - return ctx.stylize('-0', 'number');
|
318 | - return ctx.stylize('' + value, 'number');
|
319 | - }
|
320 | - if (isBoolean(value))
|
321 | - return ctx.stylize('' + value, 'boolean');
|
322 | - // For some reason typeof null is "object", so special case here.
|
323 | - if (isNull(value))
|
324 | - return ctx.stylize('null', 'null');
|
325 | -}
|
326 | -
|
327 | -
|
328 | -function formatError(value) {
|
329 | - return '[' + Error.prototype.toString.call(value) + ']';
|
330 | -}
|
331 | -
|
332 | -
|
333 | -function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
|
334 | - var output = [];
|
335 | - for (var i = 0, l = value.length; i < l; ++i) {
|
336 | - if (hasOwnProperty(value, String(i))) {
|
337 | - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
|
338 | - String(i), true));
|
339 | - } else {
|
340 | - output.push('');
|
341 | - }
|
342 | - }
|
343 | - keys.forEach(function(key) {
|
344 | - if (!key.match(/^\d+$/)) {
|
345 | - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
|
346 | - key, true));
|
347 | - }
|
348 | - });
|
349 | - return output;
|
350 | -}
|
351 | -
|
352 | -
|
353 | -function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
|
354 | - var name, str, desc;
|
355 | - desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
|
356 | - if (desc.get) {
|
357 | - if (desc.set) {
|
358 | - str = ctx.stylize('[Getter/Setter]', 'special');
|
359 | - } else {
|
360 | - str = ctx.stylize('[Getter]', 'special');
|
361 | - }
|
362 | - } else {
|
363 | - if (desc.set) {
|
364 | - str = ctx.stylize('[Setter]', 'special');
|
365 | - }
|
366 | - }
|
367 | - if (!hasOwnProperty(visibleKeys, key)) {
|
368 | - name = '[' + key + ']';
|
369 | - }
|
370 | - if (!str) {
|
371 | - if (ctx.seen.indexOf(desc.value) < 0) {
|
372 | - if (isNull(recurseTimes)) {
|
373 | - str = formatValue(ctx, desc.value, null);
|
374 | - } else {
|
375 | - str = formatValue(ctx, desc.value, recurseTimes - 1);
|
376 | - }
|
377 | - if (str.indexOf('\n') > -1) {
|
378 | - if (array) {
|
379 | - str = str.split('\n').map(function(line) {
|
380 | - return ' ' + line;
|
381 | - }).join('\n').substr(2);
|
382 | - } else {
|
383 | - str = '\n' + str.split('\n').map(function(line) {
|
384 | - return ' ' + line;
|
385 | - }).join('\n');
|
386 | - }
|
387 | - }
|
388 | - } else {
|
389 | - str = ctx.stylize('[Circular]', 'special');
|
390 | - }
|
391 | - }
|
392 | - if (isUndefined(name)) {
|
393 | - if (array && key.match(/^\d+$/)) {
|
394 | - return str;
|
395 | - }
|
396 | - name = JSON.stringify('' + key);
|
397 | - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
|
398 | - name = name.substr(1, name.length - 2);
|
399 | - name = ctx.stylize(name, 'name');
|
400 | - } else {
|
401 | - name = name.replace(/'/g, "\\'")
|
402 | - .replace(/\\"/g, '"')
|
403 | - .replace(/(^"|"$)/g, "'");
|
404 | - name = ctx.stylize(name, 'string');
|
405 | - }
|
406 | - }
|
407 | -
|
408 | - return name + ': ' + str;
|
409 | -}
|
410 | -
|
411 | -
|
412 | -function reduceToSingleString(output, base, braces) {
|
413 | - var numLinesEst = 0;
|
414 | - var length = output.reduce(function(prev, cur) {
|
415 | - numLinesEst++;
|
416 | - if (cur.indexOf('\n') >= 0) numLinesEst++;
|
417 | - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
|
418 | - }, 0);
|
419 | -
|
420 | - if (length > 60) {
|
421 | - return braces[0] +
|
422 | - (base === '' ? '' : base + '\n ') +
|
423 | - ' ' +
|
424 | - output.join(',\n ') +
|
425 | - ' ' +
|
426 | - braces[1];
|
427 | - }
|
428 | -
|
429 | - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
|
430 | -}
|
431 | -
|
432 | -
|
433 | // NOTE: These type checking functions intentionally don't use `instanceof`
|
434 | // because it is fragile and can be easily faked with `Object.create()`.
|
435 | function isArray(ar) {
|
436 | @@ -522,166 +98,10 @@ function isPrimitive(arg) {
|
437 | exports.isPrimitive = isPrimitive;
|
438 |
|
439 | function isBuffer(arg) {
|
440 | - return arg instanceof Buffer;
|
441 | + return Buffer.isBuffer(arg);
|
442 | }
|
443 | exports.isBuffer = isBuffer;
|
444 |
|
445 | function objectToString(o) {
|
446 | return Object.prototype.toString.call(o);
|
447 | -}
|
448 | -
|
449 | -
|
450 | -function pad(n) {
|
451 | - return n < 10 ? '0' + n.toString(10) : n.toString(10);
|
452 | -}
|
453 | -
|
454 | -
|
455 | -var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
|
456 | - 'Oct', 'Nov', 'Dec'];
|
457 | -
|
458 | -// 26 Feb 16:19:34
|
459 | -function timestamp() {
|
460 | - var d = new Date();
|
461 | - var time = [pad(d.getHours()),
|
462 | - pad(d.getMinutes()),
|
463 | - pad(d.getSeconds())].join(':');
|
464 | - return [d.getDate(), months[d.getMonth()], time].join(' ');
|
465 | -}
|
466 | -
|
467 | -
|
468 | -// log is just a thin wrapper to console.log that prepends a timestamp
|
469 | -exports.log = function() {
|
470 | - console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
|
471 | -};
|
472 | -
|
473 | -
|
474 | -/**
|
475 | - * Inherit the prototype methods from one constructor into another.
|
476 | - *
|
477 | - * The Function.prototype.inherits from lang.js rewritten as a standalone
|
478 | - * function (not on Function.prototype). NOTE: If this file is to be loaded
|
479 | - * during bootstrapping this function needs to be rewritten using some native
|
480 | - * functions as prototype setup using normal JavaScript does not work as
|
481 | - * expected during bootstrapping (see mirror.js in r114903).
|
482 | - *
|
483 | - * @param {function} ctor Constructor function which needs to inherit the
|
484 | - * prototype.
|
485 | - * @param {function} superCtor Constructor function to inherit prototype from.
|
486 | - */
|
487 | -exports.inherits = function(ctor, superCtor) {
|
488 | - ctor.super_ = superCtor;
|
489 | - ctor.prototype = Object.create(superCtor.prototype, {
|
490 | - constructor: {
|
491 | - value: ctor,
|
492 | - enumerable: false,
|
493 | - writable: true,
|
494 | - configurable: true
|
495 | - }
|
496 | - });
|
497 | -};
|
498 | -
|
499 | -exports._extend = function(origin, add) {
|
500 | - // Don't do anything if add isn't an object
|
501 | - if (!add || !isObject(add)) return origin;
|
502 | -
|
503 | - var keys = Object.keys(add);
|
504 | - var i = keys.length;
|
505 | - while (i--) {
|
506 | - origin[keys[i]] = add[keys[i]];
|
507 | - }
|
508 | - return origin;
|
509 | -};
|
510 | -
|
511 | -function hasOwnProperty(obj, prop) {
|
512 | - return Object.prototype.hasOwnProperty.call(obj, prop);
|
513 | -}
|
514 | -
|
515 | -
|
516 | -// Deprecated old stuff.
|
517 | -
|
518 | -exports.p = exports.deprecate(function() {
|
519 | - for (var i = 0, len = arguments.length; i < len; ++i) {
|
520 | - console.error(exports.inspect(arguments[i]));
|
521 | - }
|
522 | -}, 'util.p: Use console.error() instead');
|
523 | -
|
524 | -
|
525 | -exports.exec = exports.deprecate(function() {
|
526 | - return require('child_process').exec.apply(this, arguments);
|
527 | -}, 'util.exec is now called `child_process.exec`.');
|
528 | -
|
529 | -
|
530 | -exports.print = exports.deprecate(function() {
|
531 | - for (var i = 0, len = arguments.length; i < len; ++i) {
|
532 | - process.stdout.write(String(arguments[i]));
|
533 | - }
|
534 | -}, 'util.print: Use console.log instead');
|
535 | -
|
536 | -
|
537 | -exports.puts = exports.deprecate(function() {
|
538 | - for (var i = 0, len = arguments.length; i < len; ++i) {
|
539 | - process.stdout.write(arguments[i] + '\n');
|
540 | - }
|
541 | -}, 'util.puts: Use console.log instead');
|
542 | -
|
543 | -
|
544 | -exports.debug = exports.deprecate(function(x) {
|
545 | - process.stderr.write('DEBUG: ' + x + '\n');
|
546 | -}, 'util.debug: Use console.error instead');
|
547 | -
|
548 | -
|
549 | -exports.error = exports.deprecate(function(x) {
|
550 | - for (var i = 0, len = arguments.length; i < len; ++i) {
|
551 | - process.stderr.write(arguments[i] + '\n');
|
552 | - }
|
553 | -}, 'util.error: Use console.error instead');
|
554 | -
|
555 | -
|
556 | -exports.pump = exports.deprecate(function(readStream, writeStream, callback) {
|
557 | - var callbackCalled = false;
|
558 | -
|
559 | - function call(a, b, c) {
|
560 | - if (callback && !callbackCalled) {
|
561 | - callback(a, b, c);
|
562 | - callbackCalled = true;
|
563 | - }
|
564 | - }
|
565 | -
|
566 | - readStream.addListener('data', function(chunk) {
|
567 | - if (writeStream.write(chunk) === false) readStream.pause();
|
568 | - });
|
569 | -
|
570 | - writeStream.addListener('drain', function() {
|
571 | - readStream.resume();
|
572 | - });
|
573 | -
|
574 | - readStream.addListener('end', function() {
|
575 | - writeStream.end();
|
576 | - });
|
577 | -
|
578 | - readStream.addListener('close', function() {
|
579 | - call();
|
580 | - });
|
581 | -
|
582 | - readStream.addListener('error', function(err) {
|
583 | - writeStream.end();
|
584 | - call(err);
|
585 | - });
|
586 | -
|
587 | - writeStream.addListener('error', function(err) {
|
588 | - readStream.destroy();
|
589 | - call(err);
|
590 | - });
|
591 | -}, 'util.pump(): Use readableStream.pipe() instead');
|
592 | -
|
593 | -
|
594 | -var uv;
|
595 | -exports._errnoException = function(err, syscall) {
|
596 | - if (isUndefined(uv)) uv = process.binding('uv');
|
597 | - var errname = uv.errname(err);
|
598 | - var e = new Error(syscall + ' ' + errname);
|
599 | - e.code = errname;
|
600 | - e.errno = errname;
|
601 | - e.syscall = syscall;
|
602 | - return e;
|
603 | -};
|
604 | +} |
\ | No newline at end of file |