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