File: /var/www/design.system/node_modules/@rushstack/terminal/lib/AnsiEscape.js
"use strict";
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
// See LICENSE in the project root for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.AnsiEscape = void 0;
const Colorize_1 = require("./Colorize");
/**
* Operations for working with text strings that contain
* {@link https://en.wikipedia.org/wiki/ANSI_escape_code | ANSI escape codes}.
* The most commonly used escape codes set the foreground/background color for console output.
* @public
*/
class AnsiEscape {
static getEscapeSequenceForAnsiCode(code) {
return `\u001b[${code}m`;
}
/**
* Returns the input text with all ANSI escape codes removed. For example, this is useful when saving
* colorized console output to a log file.
*/
static removeCodes(text) {
// eslint-disable-next-line no-control-regex
return text.replace(AnsiEscape._csiRegExp, '');
}
/**
* Replaces ANSI escape codes with human-readable tokens. This is useful for unit tests
* that compare text strings in test assertions or snapshot files.
*/
static formatForTests(text, options) {
if (!options) {
options = {};
}
let result = text.replace(AnsiEscape._csiRegExp, (capture, csiCode) => {
// If it is an SGR code, then try to show a friendly token
const match = csiCode.match(AnsiEscape._sgrRegExp);
if (match) {
const sgrParameter = parseInt(match[1], 10);
const sgrParameterName = AnsiEscape._tryGetSgrFriendlyName(sgrParameter);
if (sgrParameterName) {
// Example: "[black-bg]"
return `[${sgrParameterName}]`;
}
}
// Otherwise show the raw code, but without the "[" from the CSI prefix
// Example: "[31m]"
return `[${csiCode}]`;
});
if (options.encodeNewlines) {
result = result
.replace(AnsiEscape._backslashNRegExp, '[n]')
.replace(AnsiEscape._backslashRRegExp, `[r]`);
}
return result;
}
// Returns a human-readable token representing an SGR parameter, or undefined for parameter that is not well-known.
// The SGR parameter numbers are documented in this table:
// https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_parameters
static _tryGetSgrFriendlyName(sgiParameter) {
switch (sgiParameter) {
case Colorize_1.SgrParameterAttribute.BlackForeground:
return 'black';
case Colorize_1.SgrParameterAttribute.RedForeground:
return 'red';
case Colorize_1.SgrParameterAttribute.GreenForeground:
return 'green';
case Colorize_1.SgrParameterAttribute.YellowForeground:
return 'yellow';
case Colorize_1.SgrParameterAttribute.BlueForeground:
return 'blue';
case Colorize_1.SgrParameterAttribute.MagentaForeground:
return 'magenta';
case Colorize_1.SgrParameterAttribute.CyanForeground:
return 'cyan';
case Colorize_1.SgrParameterAttribute.WhiteForeground:
return 'white';
case Colorize_1.SgrParameterAttribute.GrayForeground:
return 'gray';
case Colorize_1.SgrParameterAttribute.DefaultForeground:
return 'default';
case Colorize_1.SgrParameterAttribute.BlackBackground:
return 'black-bg';
case Colorize_1.SgrParameterAttribute.RedBackground:
return 'red-bg';
case Colorize_1.SgrParameterAttribute.GreenBackground:
return 'green-bg';
case Colorize_1.SgrParameterAttribute.YellowBackground:
return 'yellow-bg';
case Colorize_1.SgrParameterAttribute.BlueBackground:
return 'blue-bg';
case Colorize_1.SgrParameterAttribute.MagentaBackground:
return 'magenta-bg';
case Colorize_1.SgrParameterAttribute.CyanBackground:
return 'cyan-bg';
case Colorize_1.SgrParameterAttribute.WhiteBackground:
return 'white-bg';
case Colorize_1.SgrParameterAttribute.GrayBackground:
return 'gray-bg';
case Colorize_1.SgrParameterAttribute.DefaultBackground:
return 'default-bg';
case Colorize_1.SgrParameterAttribute.Bold:
return 'bold';
case Colorize_1.SgrParameterAttribute.Dim:
return 'dim';
case Colorize_1.SgrParameterAttribute.NormalColorOrIntensity:
return 'normal';
case Colorize_1.SgrParameterAttribute.Underline:
return 'underline';
case Colorize_1.SgrParameterAttribute.UnderlineOff:
return 'underline-off';
case Colorize_1.SgrParameterAttribute.Blink:
return 'blink';
case Colorize_1.SgrParameterAttribute.BlinkOff:
return 'blink-off';
case Colorize_1.SgrParameterAttribute.InvertColor:
return 'invert';
case Colorize_1.SgrParameterAttribute.InvertColorOff:
return 'invert-off';
case Colorize_1.SgrParameterAttribute.Hidden:
return 'hidden';
case Colorize_1.SgrParameterAttribute.HiddenOff:
return 'hidden-off';
default:
return undefined;
}
}
}
exports.AnsiEscape = AnsiEscape;
// For now, we only care about the Control Sequence Introducer (CSI) commands which always start with "[".
// eslint-disable-next-line no-control-regex
AnsiEscape._csiRegExp = /\x1b\[([\x30-\x3f]*[\x20-\x2f]*[\x40-\x7e])/gu;
// Text coloring is performed using Select Graphic Rendition (SGR) codes, which come after the
// CSI introducer "ESC [". The SGR sequence is a number followed by "m".
AnsiEscape._sgrRegExp = /([0-9]+)m/u;
AnsiEscape._backslashNRegExp = /\n/g;
AnsiEscape._backslashRRegExp = /\r/g;
//# sourceMappingURL=AnsiEscape.js.map