diff --git a/lib/internal/util/inspect.js b/lib/internal/util/inspect.js index 824c5961e9512c..495271fa62eecb 100644 --- a/lib/internal/util/inspect.js +++ b/lib/internal/util/inspect.js @@ -1995,13 +1995,6 @@ function formatWithOptionsInternal(inspectOptions, ...args) { return str; } -function prepareStringForGetStringWidth(str, removeControlChars) { - str = str.normalize('NFC'); - if (removeControlChars) - str = stripVTControlCharacters(str); - return str; -} - if (internalBinding('config').hasIntl) { const icu = internalBinding('icu'); // icu.getStringWidth(string, ambiguousAsFullWidth, expandEmojiSequence) @@ -2012,13 +2005,14 @@ if (internalBinding('config').hasIntl) { getStringWidth = function getStringWidth(str, removeControlChars = true) { let width = 0; - str = prepareStringForGetStringWidth(str, removeControlChars); + if (removeControlChars) + str = stripVTControlCharacters(str); for (let i = 0; i < str.length; i++) { // Try to avoid calling into C++ by first handling the ASCII portion of // the string. If it is fully ASCII, we skip the C++ part. const code = str.charCodeAt(i); if (code >= 127) { - width += icu.getStringWidth(str.slice(i)); + width += icu.getStringWidth(str.slice(i).normalize('NFC')); break; } width += code >= 32 ? 1 : 0; @@ -2032,7 +2026,9 @@ if (internalBinding('config').hasIntl) { getStringWidth = function getStringWidth(str, removeControlChars = true) { let width = 0; - str = prepareStringForGetStringWidth(str, removeControlChars); + if (removeControlChars) + str = stripVTControlCharacters(str); + str = str.normalize('NFC'); for (const char of str) { const code = char.codePointAt(0); if (isFullWidthCodePoint(code)) {