diff --git a/lib/util.js b/lib/util.js index c8619d5e3f5360..1fe03f6428c843 100644 --- a/lib/util.js +++ b/lib/util.js @@ -119,6 +119,7 @@ function styleText(format, text, { validateStream = true, stream = process.stdou validateString(text, 'text'); validateBoolean(validateStream, 'options.validateStream'); + let skipColorize; if (validateStream) { if ( !isReadableStream(stream) && @@ -127,40 +128,28 @@ function styleText(format, text, { validateStream = true, stream = process.stdou ) { throw new ERR_INVALID_ARG_TYPE('stream', ['ReadableStream', 'WritableStream', 'Stream'], stream); } - } - - if (ArrayIsArray(format)) { - let left = ''; - let right = ''; - for (const key of format) { - const formatCodes = inspect.colors[key]; - if (formatCodes == null) { - validateOneOf(key, 'format', ObjectKeys(inspect.colors)); - } - left += escapeStyleCode(formatCodes[0]); - right = `${escapeStyleCode(formatCodes[1])}${right}`; - } - return `${left}${text}${right}`; + // If the stream is falsy or should not be colorized, set skipColorize to true + skipColorize = validateStream && !lazyUtilColors().shouldColorize(stream); } - const formatCodes = inspect.colors[format]; - if (formatCodes == null) { - validateOneOf(format, 'format', ObjectKeys(inspect.colors)); - } + // If the format is not an array, convert it to an array + const formatArray = ArrayIsArray(format) ? format : [format]; - // Check colorize only after validating arg type and value - if ( - validateStream && - ( - !stream || - !lazyUtilColors().shouldColorize(stream) - ) - ) { - return text; + let left = ''; + let right = ''; + for (const key of formatArray) { + const formatCodes = inspect.colors[key]; + // If the format is not a valid style, throw an error + if (formatCodes == null) { + validateOneOf(key, 'format', ObjectKeys(inspect.colors)); + } + if (skipColorize) continue; + left += escapeStyleCode(formatCodes[0]); + right = `${escapeStyleCode(formatCodes[1])}${right}`; } - return `${escapeStyleCode(formatCodes[0])}${text}${escapeStyleCode(formatCodes[1])}`; + return skipColorize ? text : `${left}${text}${right}`; } /** diff --git a/test/parallel/test-util-styletext.js b/test/parallel/test-util-styletext.js index 764ce6f1a31c94..68c31eef2e07c8 100644 --- a/test/parallel/test-util-styletext.js +++ b/test/parallel/test-util-styletext.js @@ -95,8 +95,15 @@ if (fd !== -1) { ...process.env, ...testCase.env }; - const output = util.styleText('red', 'test', { stream: writeStream }); - assert.strictEqual(output, testCase.expected); + { + const output = util.styleText('red', 'test', { stream: writeStream }); + assert.strictEqual(output, testCase.expected); + } + { + // Check that when passing an array of styles, the output behaves the same + const output = util.styleText(['red'], 'test', { stream: writeStream }); + assert.strictEqual(output, testCase.expected); + } process.env = originalEnv; }); } else {