Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80542 views
1
diff --git a/lib/util.js b/lib/util.js
2
index a03e874..9074e8e 100644
3
--- a/lib/util.js
4
+++ b/lib/util.js
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
+}
605