aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/util.md33
-rw-r--r--lib/repl.js5
-rw-r--r--lib/util.js5
-rw-r--r--test/parallel/test-stream-buffer-list.js8
-rw-r--r--test/parallel/test-util-inspect-proxy.js16
-rw-r--r--test/parallel/test-util-inspect.js26
6 files changed, 60 insertions, 33 deletions
diff --git a/doc/api/util.md b/doc/api/util.md
index a2d3c71bb6..ae4cec72e1 100644
--- a/doc/api/util.md
+++ b/doc/api/util.md
@@ -328,6 +328,9 @@ stream.write('With ES6');
added: v0.3.0
changes:
- version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/17907
+ description: The `depth` default changed to Infinity.
+ - version: REPLACEME
pr-url: https://github.com/nodejs/node/pull/REPLACEME
description: The `compact` option is supported now.
- version: v6.6.0
@@ -349,9 +352,6 @@ changes:
* `options` {Object}
* `showHidden` {boolean} If `true`, the `object`'s non-enumerable symbols and
properties will be included in the formatted result. Defaults to `false`.
- * `depth` {number} Specifies the number of times to recurse while formatting
- the `object`. This is useful for inspecting large complicated objects.
- Defaults to `2`. To make it recurse indefinitely pass `null`.
* `colors` {boolean} If `true`, the output will be styled with ANSI color
codes. Defaults to `false`. Colors are customizable, see
[Customizing `util.inspect` colors][].
@@ -362,8 +362,8 @@ changes:
objects. Defaults to `false`.
* `maxArrayLength` {number} Specifies the maximum number of array and
`TypedArray` elements to include when formatting. Defaults to `100`. Set to
- `null` to show all array elements. Set to `0` or negative to show no array
- elements.
+ `null` or `Infinity` to show all array elements. Set to `0` or negative to
+ show no array elements.
* `breakLength` {number} The length at which an object's keys are split
across multiple lines. Set to `Infinity` to format an object as a single
line. Defaults to 60 for legacy compatibility.
@@ -374,6 +374,10 @@ changes:
objects the same as arrays. Note that no text will be reduced below 16
characters, no matter the `breakLength` size. For more information, see the
example below. Defaults to `true`.
+ * `depth` {number} Specifies the number visible nested Objects in an `object`.
+ This is useful to minimize the inspection output for large complicated
+ objects. To make it recurse indefinitely pass `null` or `Infinity`. Defaults
+ to `Infinity`.
The `util.inspect()` method returns a string representation of `object` that is
intended for debugging. The output of `util.inspect` may change at any time
@@ -398,12 +402,23 @@ util.inspect(new Bar()); // 'Bar {}'
util.inspect(baz); // '[foo] {}'
```
-The following example inspects all properties of the `util` object:
+The following example limits the inspected output of the `paths` property:
```js
const util = require('util');
-console.log(util.inspect(util, { showHidden: true, depth: null }));
+console.log(util.inspect(module, { depth: 0 }));
+// Instead of showing all entries in `paths` `[Array]` is used to limit the
+// output for readability:
+
+// Module {
+// id: '<repl>',
+// exports: {},
+// parent: undefined,
+// filename: null,
+// loaded: false,
+// children: [],
+// paths: [Array] }
```
Values may supply their own custom `inspect(depth, opts)` functions, when
@@ -423,7 +438,7 @@ const o = {
'foo']], 4],
b: new Map([['za', 1], ['zb', 'test']])
};
-console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }));
+console.log(util.inspect(o, { compact: true, breakLength: 80 }));
// This will print
@@ -437,7 +452,7 @@ console.log(util.inspect(o, { compact: true, depth: 5, breakLength: 80 }));
// b: Map { 'za' => 1, 'zb' => 'test' } }
// Setting `compact` to false changes the output to be more reader friendly.
-console.log(util.inspect(o, { compact: false, depth: 5, breakLength: 80 }));
+console.log(util.inspect(o, { compact: false, breakLength: 80 }));
// {
// a: [
diff --git a/lib/repl.js b/lib/repl.js
index 20c1c4ee92..84682b1b63 100644
--- a/lib/repl.js
+++ b/lib/repl.js
@@ -103,8 +103,9 @@ function hasOwnProperty(obj, prop) {
// Can overridden with custom print functions, such as `probe` or `eyes.js`.
// This is the default "writer" value if none is passed in the REPL options.
const writer = exports.writer = (obj) => util.inspect(obj, writer.options);
-writer.options =
- Object.assign({}, util.inspect.defaultOptions, { showProxy: true });
+writer.options = Object.assign({},
+ util.inspect.defaultOptions,
+ { showProxy: true, depth: 2 });
exports._builtinLibs = internalModule.builtinLibs;
diff --git a/lib/util.js b/lib/util.js
index e0cdc2c28f..9d1739f786 100644
--- a/lib/util.js
+++ b/lib/util.js
@@ -64,7 +64,7 @@ const {
const inspectDefaultOptions = Object.seal({
showHidden: false,
- depth: 2,
+ depth: null,
colors: false,
customInspect: true,
showProxy: false,
@@ -317,8 +317,7 @@ Object.defineProperty(inspect, 'defaultOptions', {
if (options === null || typeof options !== 'object') {
throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'options', 'Object');
}
- Object.assign(inspectDefaultOptions, options);
- return inspectDefaultOptions;
+ return _extend(inspectDefaultOptions, options);
}
});
diff --git a/test/parallel/test-stream-buffer-list.js b/test/parallel/test-stream-buffer-list.js
index ddbff452de..87c9d2a2bb 100644
--- a/test/parallel/test-stream-buffer-list.js
+++ b/test/parallel/test-stream-buffer-list.js
@@ -3,6 +3,7 @@
require('../common');
const assert = require('assert');
const BufferList = require('internal/streams/BufferList');
+const util = require('util');
// Test empty buffer list.
const emptyList = new BufferList();
@@ -25,3 +26,10 @@ assert.strictEqual(list.join(','), 'foo');
const shifted = list.shift();
assert.strictEqual(shifted, 'foo');
assert.deepStrictEqual(list, new BufferList());
+
+const tmp = util.inspect.defaultOptions.colors;
+util.inspect.defaultOptions = { colors: true };
+assert.strictEqual(
+ util.inspect(list),
+ 'BufferList { length: \u001b[33m0\u001b[39m }');
+util.inspect.defaultOptions = { colors: tmp };
diff --git a/test/parallel/test-util-inspect-proxy.js b/test/parallel/test-util-inspect-proxy.js
index 63527986b1..8c76285499 100644
--- a/test/parallel/test-util-inspect-proxy.js
+++ b/test/parallel/test-util-inspect-proxy.js
@@ -48,13 +48,17 @@ const expected1 = 'Proxy [ {}, {} ]';
const expected2 = 'Proxy [ Proxy [ {}, {} ], {} ]';
const expected3 = 'Proxy [ Proxy [ Proxy [ {}, {} ], {} ], Proxy [ {}, {} ] ]';
const expected4 = 'Proxy [ Proxy [ {}, {} ], Proxy [ Proxy [ {}, {} ], {} ] ]';
-const expected5 = 'Proxy [ Proxy [ Proxy [ Proxy [Array], {} ],' +
+const expected5 = 'Proxy [ Proxy [ Proxy [ Proxy [ {}, {} ], {} ],' +
' Proxy [ {}, {} ] ],\n Proxy [ Proxy [ {}, {} ]' +
- ', Proxy [ Proxy [Array], {} ] ] ]';
-const expected6 = 'Proxy [ Proxy [ Proxy [ Proxy [Array], Proxy [Array]' +
- ' ],\n Proxy [ Proxy [Array], Proxy [Array] ] ],\n' +
- ' Proxy [ Proxy [ Proxy [Array], Proxy [Array] ],\n' +
- ' Proxy [ Proxy [Array], Proxy [Array] ] ] ]';
+ ', Proxy [ Proxy [ {}, {} ], {} ] ] ]';
+const expected6 = 'Proxy [ Proxy [ Proxy [ Proxy [ Proxy [ {}, {} ], {} ], ' +
+ 'Proxy [ {}, {} ] ],\n' +
+ ' Proxy [ Proxy [ {}, {} ], ' +
+ 'Proxy [ Proxy [ {}, {} ], {} ] ] ],\n' +
+ ' Proxy [ Proxy [ Proxy [ Proxy [ {}, {} ], {} ], ' +
+ 'Proxy [ {}, {} ] ],\n' +
+ ' Proxy [ Proxy [ {}, {} ], ' +
+ 'Proxy [ Proxy [ {}, {} ], {} ] ] ] ]';
assert.strictEqual(
util.inspect(proxy1, { showProxy: true, depth: null }),
expected1);
diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js
index 335ba09bd7..35e85f6fdd 100644
--- a/test/parallel/test-util-inspect.js
+++ b/test/parallel/test-util-inspect.js
@@ -68,7 +68,7 @@ assert.strictEqual(util.inspect({ a: 1, b: 2 }), '{ a: 1, b: 2 }');
assert.strictEqual(util.inspect({ 'a': {} }), '{ a: {} }');
assert.strictEqual(util.inspect({ 'a': { 'b': 2 } }), '{ a: { b: 2 } }');
assert.strictEqual(util.inspect({ 'a': { 'b': { 'c': { 'd': 2 } } } }),
- '{ a: { b: { c: [Object] } } }');
+ '{ a: { b: { c: { d: 2 } } } }');
assert.strictEqual(
util.inspect({ 'a': { 'b': { 'c': { 'd': 2 } } } }, false, null),
'{ a: { b: { c: { d: 2 } } } }');
@@ -106,7 +106,7 @@ assert.strictEqual(util.inspect((new JSStream())._externalStream),
assert.strictEqual(util.inspect({ a: regexp }, false, 0), '{ a: /regexp/ }');
}
-assert(/Object/.test(
+assert(!/Object/.test(
util.inspect({ a: { a: { a: { a: {} } } } }, undefined, undefined, true)
));
assert(!/Object/.test(
@@ -1012,15 +1012,15 @@ if (typeof Symbol !== 'undefined') {
// Empty and circular before depth
{
const arr = [[[[]]]];
- assert.strictEqual(util.inspect(arr), '[ [ [ [] ] ] ]');
+ assert.strictEqual(util.inspect(arr, { depth: 2 }), '[ [ [ [] ] ] ]');
arr[0][0][0][0] = [];
- assert.strictEqual(util.inspect(arr), '[ [ [ [Array] ] ] ]');
+ assert.strictEqual(util.inspect(arr, { depth: 2 }), '[ [ [ [Array] ] ] ]');
arr[0][0][0] = {};
- assert.strictEqual(util.inspect(arr), '[ [ [ {} ] ] ]');
+ assert.strictEqual(util.inspect(arr, { depth: 2 }), '[ [ [ {} ] ] ]');
arr[0][0][0] = { a: 2 };
- assert.strictEqual(util.inspect(arr), '[ [ [ [Object] ] ] ]');
+ assert.strictEqual(util.inspect(arr, { depth: 2 }), '[ [ [ [Object] ] ] ]');
arr[0][0][0] = arr;
- assert.strictEqual(util.inspect(arr), '[ [ [ [Circular] ] ] ]');
+ assert.strictEqual(util.inspect(arr, { depth: 2 }), '[ [ [ [Circular] ] ] ]');
}
// Corner cases.
@@ -1117,22 +1117,22 @@ if (typeof Symbol !== 'undefined') {
assert(!/1 more item/.test(util.inspect(arr)));
util.inspect.defaultOptions.maxArrayLength = oldOptions.maxArrayLength;
assert(/1 more item/.test(util.inspect(arr)));
- util.inspect.defaultOptions.depth = null;
- assert(!/Object/.test(util.inspect(obj)));
- util.inspect.defaultOptions.depth = oldOptions.depth;
+ util.inspect.defaultOptions.depth = 2;
assert(/Object/.test(util.inspect(obj)));
+ util.inspect.defaultOptions.depth = oldOptions.depth;
+ assert(!/Object/.test(util.inspect(obj)));
assert.strictEqual(
JSON.stringify(util.inspect.defaultOptions),
JSON.stringify(oldOptions)
);
// Set multiple options through object assignment
- util.inspect.defaultOptions = { maxArrayLength: null, depth: null };
+ util.inspect.defaultOptions = { maxArrayLength: null, depth: 2 };
assert(!/1 more item/.test(util.inspect(arr)));
- assert(!/Object/.test(util.inspect(obj)));
+ assert(/Object/.test(util.inspect(obj)));
util.inspect.defaultOptions = oldOptions;
assert(/1 more item/.test(util.inspect(arr)));
- assert(/Object/.test(util.inspect(obj)));
+ assert(!/Object/.test(util.inspect(obj)));
assert.strictEqual(
JSON.stringify(util.inspect.defaultOptions),
JSON.stringify(oldOptions)