Skip to content

Commit

Permalink
util: enforce shouldColorize in styleText array arg
Browse files Browse the repository at this point in the history
  • Loading branch information
marco-ippolito committed Jan 25, 2025
1 parent d978610 commit 4599cad
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 30 deletions.
45 changes: 17 additions & 28 deletions lib/util.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) &&
Expand All @@ -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}`;
}

/**
Expand Down
11 changes: 9 additions & 2 deletions test/parallel/test-util-styletext.js
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down

0 comments on commit 4599cad

Please sign in to comment.