From a881d0ede37698a3a5fdb189d31f6f4b5c215c73 Mon Sep 17 00:00:00 2001 From: Hamid Reza Ghavami Date: Mon, 6 Jul 2026 10:09:21 +0300 Subject: [PATCH 1/2] util: allow single-line format when break length is infinite Signed-off-by: Hamid Reza Ghavami --- lib/internal/util/inspect.js | 8 ++++++++ test/parallel/test-util-inspect.js | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index c959c056fece45..9eb8ea66e444cb 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -2624,6 +2624,14 @@ function isBelowBreakLength(ctx, output, start, base) { // TODO(BridgeAR): Add unicode support. Use the readline getStringWidth // function. Check the performance overhead and make it an opt-in in case it's // significant. + // allow the single-line format if the length limit is infinite and no items have newlines + if (ctx.breakLength === Infinity) { + if (base !== '' && StringPrototypeIncludes(base, '\n')) return false; + for (let i = 0; i < output.length; i++) { + if (typeof output[i] === 'string' && StringPrototypeIncludes(output[i], '\n')) return false; + } + return true; + } let totalLength = output.length + start; if (totalLength + output.length > ctx.breakLength) return false; diff --git a/test/parallel/test-util-inspect.js b/test/parallel/test-util-inspect.js index 6a1da6d4129fbd..161090e30f2d6a 100644 --- a/test/parallel/test-util-inspect.js +++ b/test/parallel/test-util-inspect.js @@ -4058,3 +4058,9 @@ ${error.stack.split('\n').slice(1).join('\n')}`, assert.match(inspect(DOMException.prototype), /^\[object DOMException\] \{/); delete Error[Symbol.hasInstance]; } + +{ + const obj = { a: 'short string', b: [1, 2], c: { d: true } }; + const expected = "{ a: 'short string', b: [ 1, 2 ], c: { d: true } }"; + assert.strictEqual(util.inspect(obj, { breakLength: Infinity }), expected); +} From fccaa919c21615eead2c2e3d7cb764cb3b412a96 Mon Sep 17 00:00:00 2001 From: Hamid Reza Ghavami Date: Tue, 7 Jul 2026 20:27:41 +0300 Subject: [PATCH 2/2] fs: accept all valid utf8 values in fast paths Signed-off-by: Hamid Reza Ghavami --- lib/fs.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/fs.js b/lib/fs.js index 1ea70ff192d6dd..1c1b29cede353e 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -59,6 +59,13 @@ const { O_SYMLINK, } = constants; +function isUtf8Encoding(encoding) { + return encoding === 'utf8' || + encoding === 'utf-8' || + encoding === 'UTF8' || + encoding === 'UTF-8'; +} + const pathModule = require('path'); const { isArrayBufferView } = require('internal/util/types'); @@ -531,8 +538,7 @@ function readFileSync(path, options) { validateReadFileBufferOptions(options); const hasUserBuffer = options.buffer !== undefined; - if ((options.encoding === 'utf8' || options.encoding === 'utf-8') && - !hasUserBuffer) { + if (isUtf8Encoding(options.encoding) && !hasUserBuffer) { if (!isInt32(path)) { path = getValidatedPath(path); } @@ -2906,7 +2912,7 @@ function writeFileSync(path, data, options) { const flag = options.flag || 'w'; // C++ fast path for string data and UTF8 encoding - if (typeof data === 'string' && (options.encoding === 'utf8' || options.encoding === 'utf-8')) { + if (typeof data === 'string' && isUtf8Encoding(options.encoding)) { if (!isInt32(path)) { path = getValidatedPath(path); } @@ -3197,7 +3203,7 @@ if (isWindows) { } function encodeRealpathResult(result, options) { - if (!options || !options.encoding || options.encoding === 'utf8') + if (!options || !options.encoding || isUtf8Encoding(options.encoding)) return result; const asBuffer = Buffer.from(result); if (options.encoding === 'buffer') {