buffer: fix custom inspection with extra properties
This broke due to a recent change that prevents exposing inspect internals. It now relies on the public API instead and should be a bit more robust due to that. PR-URL: https://github.com/nodejs/node/pull/27074 Reviewed-By: Michaël Zasso <targos@protonmail.com> Reviewed-By: Yongsheng Zhang <zyszys98@gmail.com>
This commit is contained in:
parent
fadcb2d850
commit
d834275a48
@ -59,8 +59,7 @@ const {
|
||||
isUint8Array
|
||||
} = require('internal/util/types');
|
||||
const {
|
||||
formatProperty,
|
||||
kObjectType
|
||||
inspect: utilInspect
|
||||
} = require('internal/util/inspect');
|
||||
|
||||
const {
|
||||
@ -665,13 +664,24 @@ Buffer.prototype[customInspectSymbol] = function inspect(recurseTimes, ctx) {
|
||||
str += ` ... ${remaining} more byte${remaining > 1 ? 's' : ''}`;
|
||||
// Inspect special properties as well, if possible.
|
||||
if (ctx) {
|
||||
let extras = false;
|
||||
const filter = ctx.showHidden ? ALL_PROPERTIES : ONLY_ENUMERABLE;
|
||||
str += getOwnNonIndexProperties(this, filter).reduce((str, key) => {
|
||||
// Using `formatProperty()` expects an indentationLvl to be set.
|
||||
ctx.indentationLvl = 0;
|
||||
str += `, ${formatProperty(ctx, this, recurseTimes, key, kObjectType)}`;
|
||||
return str;
|
||||
}, '');
|
||||
const obj = getOwnNonIndexProperties(this, filter).reduce((obj, key) => {
|
||||
extras = true;
|
||||
obj[key] = this[key];
|
||||
return obj;
|
||||
}, Object.create(null));
|
||||
if (extras) {
|
||||
if (this.length !== 0)
|
||||
str += ', ';
|
||||
// '[Object: null prototype] {'.length === 26
|
||||
// This is guarded with a test.
|
||||
str += utilInspect(obj, {
|
||||
...ctx,
|
||||
breakLength: Infinity,
|
||||
compact: true
|
||||
}).slice(27, -2);
|
||||
}
|
||||
}
|
||||
return `<${this.constructor.name} ${str}>`;
|
||||
};
|
||||
|
@ -1546,8 +1546,6 @@ function formatWithOptions(inspectOptions, ...args) {
|
||||
|
||||
module.exports = {
|
||||
inspect,
|
||||
formatProperty,
|
||||
kObjectType,
|
||||
format,
|
||||
formatWithOptions
|
||||
};
|
||||
|
@ -55,4 +55,16 @@ assert.strictEqual(util.inspect(b), expected);
|
||||
assert.strictEqual(util.inspect(s), expected);
|
||||
|
||||
b.inspect = undefined;
|
||||
assert.strictEqual(util.inspect(b), '<Buffer 31 32, inspect: undefined>');
|
||||
b.prop = new Uint8Array(0);
|
||||
assert.strictEqual(
|
||||
util.inspect(b),
|
||||
'<Buffer 31 32, inspect: undefined, prop: Uint8Array []>'
|
||||
);
|
||||
|
||||
b = Buffer.alloc(0);
|
||||
b.prop = 123;
|
||||
|
||||
assert.strictEqual(
|
||||
util.inspect(b),
|
||||
'<Buffer prop: 123>'
|
||||
);
|
||||
|
Loading…
x
Reference in New Issue
Block a user