@rushstack/terminal 0.15.3 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.json CHANGED
@@ -1,6 +1,30 @@
1
1
  {
2
2
  "name": "@rushstack/terminal",
3
3
  "entries": [
4
+ {
5
+ "version": "0.16.0",
6
+ "tag": "@rushstack/terminal_v0.16.0",
7
+ "date": "Thu, 11 Sep 2025 00:22:31 GMT",
8
+ "comments": {
9
+ "minor": [
10
+ {
11
+ "comment": "(BREAKING CHANGE) Remove support for legacy `IColorableSequence` parameters passed to `Terminal` insance `write*` functions. Note that types for `IColorableSequence` were removed with #3176 in 2022."
12
+ }
13
+ ]
14
+ }
15
+ },
16
+ {
17
+ "version": "0.15.4",
18
+ "tag": "@rushstack/terminal_v0.15.4",
19
+ "date": "Wed, 23 Jul 2025 20:55:57 GMT",
20
+ "comments": {
21
+ "dependency": [
22
+ {
23
+ "comment": "Updating dependency \"@rushstack/node-core-library\" to `5.14.0`"
24
+ }
25
+ ]
26
+ }
27
+ },
4
28
  {
5
29
  "version": "0.15.3",
6
30
  "tag": "@rushstack/terminal_v0.15.3",
package/CHANGELOG.md CHANGED
@@ -1,6 +1,18 @@
1
1
  # Change Log - @rushstack/terminal
2
2
 
3
- This log was last generated on Thu, 01 May 2025 00:11:12 GMT and should not be manually modified.
3
+ This log was last generated on Thu, 11 Sep 2025 00:22:31 GMT and should not be manually modified.
4
+
5
+ ## 0.16.0
6
+ Thu, 11 Sep 2025 00:22:31 GMT
7
+
8
+ ### Minor changes
9
+
10
+ - (BREAKING CHANGE) Remove support for legacy `IColorableSequence` parameters passed to `Terminal` insance `write*` functions. Note that types for `IColorableSequence` were removed with #3176 in 2022.
11
+
12
+ ## 0.15.4
13
+ Wed, 23 Jul 2025 20:55:57 GMT
14
+
15
+ _Version update only_
4
16
 
5
17
  ## 0.15.3
6
18
  Thu, 01 May 2025 00:11:12 GMT
@@ -948,7 +948,7 @@ export declare class StringBufferTerminalProvider implements ITerminalProvider {
948
948
  * @beta
949
949
  */
950
950
  export declare class Terminal implements ITerminal {
951
- private _providers;
951
+ private readonly _providers;
952
952
  constructor(provider: ITerminalProvider);
953
953
  /**
954
954
  * {@inheritdoc ITerminal.registerProvider}
@@ -999,7 +999,6 @@ export declare class Terminal implements ITerminal {
999
999
  */
1000
1000
  writeDebugLine(...messageParts: TerminalWriteParameters): void;
1001
1001
  private _writeSegmentsToProviders;
1002
- private _serializeLegacyColorableSequence;
1003
1002
  private _normalizeWriteParameters;
1004
1003
  }
1005
1004
 
@@ -5,7 +5,7 @@
5
5
  "toolPackages": [
6
6
  {
7
7
  "packageName": "@microsoft/api-extractor",
8
- "packageVersion": "7.52.5"
8
+ "packageVersion": "7.52.11"
9
9
  }
10
10
  ]
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AnsiEscape.d.ts","sourceRoot":"","sources":["../src/AnsiEscape.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IAGrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAA2D;IAI7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwB;IAE1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;WAE5C,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhE;;;OAGG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAK/C;;;OAGG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iCAAiC,GAAG,MAAM;IAiC/F,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAsEtC"}
1
+ {"version":3,"file":"AnsiEscape.d.ts","sourceRoot":"","sources":["../src/AnsiEscape.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,MAAM,WAAW,iCAAiC;IAChD;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;GAKG;AACH,qBAAa,UAAU;IAGrB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAA2D;IAI7F,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAwB;IAE1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;IAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAiB;WAE5C,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIhE;;;OAGG;WACW,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAI/C;;;OAGG;WACW,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iCAAiC,GAAG,MAAM;IAiC/F,OAAO,CAAC,MAAM,CAAC,sBAAsB;CAsEtC"}
package/lib/AnsiEscape.js CHANGED
@@ -19,7 +19,6 @@ class AnsiEscape {
19
19
  * colorized console output to a log file.
20
20
  */
21
21
  static removeCodes(text) {
22
- // eslint-disable-next-line no-control-regex
23
22
  return text.replace(AnsiEscape._csiRegExp, '');
24
23
  }
25
24
  /**
@@ -1 +1 @@
1
- {"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"]}
1
+ {"version":3,"file":"AnsiEscape.js","sourceRoot":"","sources":["../src/AnsiEscape.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,yCAAmD;AAanD;;;;;GAKG;AACH,MAAa,UAAU;IAYd,MAAM,CAAC,4BAA4B,CAAC,IAAY;QACrD,OAAO,UAAU,IAAI,GAAG,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,WAAW,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,cAAc,CAAC,IAAY,EAAE,OAA2C;QACpF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAED,IAAI,MAAM,GAAW,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE;YAC5F,0DAA0D;YAC1D,MAAM,KAAK,GAA4B,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC5E,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,YAAY,GAAW,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpD,MAAM,gBAAgB,GAAuB,UAAU,CAAC,sBAAsB,CAAC,YAAY,CAAC,CAAC;gBAC7F,IAAI,gBAAgB,EAAE,CAAC;oBACrB,wBAAwB;oBACxB,OAAO,IAAI,gBAAgB,GAAG,CAAC;gBACjC,CAAC;YACH,CAAC;YAED,uEAAuE;YACvE,mBAAmB;YACnB,OAAO,IAAI,OAAO,GAAG,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3B,MAAM,GAAG,MAAM;iBACZ,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC;iBAC5C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,mHAAmH;IACnH,0DAA0D;IAC1D,gEAAgE;IACxD,MAAM,CAAC,sBAAsB,CAAC,YAAoB;QACxD,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,OAAO,CAAC;YACjB,KAAK,gCAAqB,CAAC,aAAa;gBACtC,OAAO,KAAK,CAAC;YACf,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,OAAO,CAAC;YACjB,KAAK,gCAAqB,CAAC,gBAAgB;gBACzC,OAAO,QAAQ,CAAC;YAClB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,MAAM,CAAC;YAChB,KAAK,gCAAqB,CAAC,iBAAiB;gBAC1C,OAAO,SAAS,CAAC;YACnB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,MAAM,CAAC;YAChB,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,OAAO,CAAC;YACjB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,MAAM,CAAC;YAChB,KAAK,gCAAqB,CAAC,iBAAiB;gBAC1C,OAAO,SAAS,CAAC;YAEnB,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,UAAU,CAAC;YACpB,KAAK,gCAAqB,CAAC,aAAa;gBACtC,OAAO,QAAQ,CAAC;YAClB,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,UAAU,CAAC;YACpB,KAAK,gCAAqB,CAAC,gBAAgB;gBACzC,OAAO,WAAW,CAAC;YACrB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,SAAS,CAAC;YACnB,KAAK,gCAAqB,CAAC,iBAAiB;gBAC1C,OAAO,YAAY,CAAC;YACtB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,SAAS,CAAC;YACnB,KAAK,gCAAqB,CAAC,eAAe;gBACxC,OAAO,UAAU,CAAC;YACpB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,SAAS,CAAC;YACnB,KAAK,gCAAqB,CAAC,iBAAiB;gBAC1C,OAAO,YAAY,CAAC;YAEtB,KAAK,gCAAqB,CAAC,IAAI;gBAC7B,OAAO,MAAM,CAAC;YAChB,KAAK,gCAAqB,CAAC,GAAG;gBAC5B,OAAO,KAAK,CAAC;YACf,KAAK,gCAAqB,CAAC,sBAAsB;gBAC/C,OAAO,QAAQ,CAAC;YAClB,KAAK,gCAAqB,CAAC,SAAS;gBAClC,OAAO,WAAW,CAAC;YACrB,KAAK,gCAAqB,CAAC,YAAY;gBACrC,OAAO,eAAe,CAAC;YACzB,KAAK,gCAAqB,CAAC,KAAK;gBAC9B,OAAO,OAAO,CAAC;YACjB,KAAK,gCAAqB,CAAC,QAAQ;gBACjC,OAAO,WAAW,CAAC;YACrB,KAAK,gCAAqB,CAAC,WAAW;gBACpC,OAAO,QAAQ,CAAC;YAClB,KAAK,gCAAqB,CAAC,cAAc;gBACvC,OAAO,YAAY,CAAC;YACtB,KAAK,gCAAqB,CAAC,MAAM;gBAC/B,OAAO,QAAQ,CAAC;YAClB,KAAK,gCAAqB,CAAC,SAAS;gBAClC,OAAO,YAAY,CAAC;YACtB;gBACE,OAAO,SAAS,CAAC;QACrB,CAAC;IACH,CAAC;;AAlIH,gCAmIC;AAlIC,0GAA0G;AAC1G,4CAA4C;AACpB,qBAAU,GAAW,+CAA+C,CAAC;AAE7F,8FAA8F;AAC9F,yEAAyE;AACjD,qBAAU,GAAW,YAAY,CAAC;AAElC,4BAAiB,GAAW,KAAK,CAAC;AAClC,4BAAiB,GAAW,KAAK,CAAC","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 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"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PrefixProxyTerminalProvider.d.ts","sourceRoot":"","sources":["../src/PrefixProxyTerminalProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD;;OAEG;IACH,gBAAgB,EAAE,iBAAiB,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,yCAA0C,SAAQ,uCAAuC;IACxG;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,0CAA2C,SAAQ,uCAAuC;IACzG;;;OAGG;IACH,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAC3C,yCAAyC,GACzC,0CAA0C,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IACnE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,YAAY,CAAU;gBAEX,OAAO,EAAE,mCAAmC;IAmB/D,gBAAgB;IAChB,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,gBAAgB;IAChB,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,gBAAgB;IACT,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;CA0BrE"}
1
+ {"version":3,"file":"PrefixProxyTerminalProvider.d.ts","sourceRoot":"","sources":["../src/PrefixProxyTerminalProvider.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAEvF;;GAEG;AACH,MAAM,WAAW,uCAAuC;IACtD;;OAEG;IACH,gBAAgB,EAAE,iBAAiB,CAAC;CACrC;AAED;;;;GAIG;AACH,MAAM,WAAW,yCAA0C,SAAQ,uCAAuC;IACxG;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,0CAA2C,SAAQ,uCAAuC;IACzG;;;OAGG;IACH,SAAS,EAAE,MAAM,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,mCAAmC,GAC3C,yCAAyC,GACzC,0CAA0C,CAAC;AAE/C;;;;;GAKG;AACH,qBAAa,2BAA4B,YAAW,iBAAiB;IACnE,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAoB;IAC5D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,YAAY,CAAU;gBAEX,OAAO,EAAE,mCAAmC;IAkB/D,gBAAgB;IAChB,IAAW,aAAa,IAAI,OAAO,CAElC;IAED,gBAAgB;IAChB,IAAW,YAAY,IAAI,MAAM,CAEhC;IAED,gBAAgB;IACT,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,wBAAwB,GAAG,IAAI;CAyBrE"}
@@ -23,7 +23,6 @@ class PrefixProxyTerminalProvider {
23
23
  this._getPrefix = getPrefix;
24
24
  }
25
25
  this._isOnNewline = true;
26
- // eslint-disable-next-line @rushstack/security/no-unsafe-regexp
27
26
  this._newlineRegex = new RegExp(`${node_core_library_1.Text.escapeRegExp(terminalProvider.eolCharacter)}|\\n`, 'g');
28
27
  }
29
28
  /** @override */
@@ -38,7 +37,6 @@ class PrefixProxyTerminalProvider {
38
37
  write(data, severity) {
39
38
  // We need to track newlines to ensure that the prefix is added to each line
40
39
  let currentIndex = 0;
41
- // eslint-disable-next-line @rushstack/no-new-null
42
40
  let newlineMatch;
43
41
  while ((newlineMatch = this._newlineRegex.exec(data))) {
44
42
  // Extract the line, add the prefix, and write it out with the newline
@@ -1 +1 @@
1
- {"version":3,"file":"PrefixProxyTerminalProvider.js","sourceRoot":"","sources":["../src/PrefixProxyTerminalProvider.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,oEAAoD;AA6CpD;;;;;GAKG;AACH,MAAa,2BAA2B;IAMtC,YAAmB,OAA4C;QAC7D,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAErC,IAAI,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;QAEhD,IAAK,OAAqD,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAoD,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,SAAS,EAAE,GAAG,OAAqD,CAAC;YAC5E,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,gEAAgE;QAChE,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,wBAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClG,CAAC;IAED,gBAAgB;IAChB,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;IACpD,CAAC;IAED,gBAAgB;IAChB,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;IACnD,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,IAAY,EAAE,QAAkC;QAC3D,4EAA4E;QAC5E,IAAI,YAAY,GAAW,CAAC,CAAC;QAC7B,kDAAkD;QAClD,IAAI,YAAoC,CAAC;QAEzC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACtD,sEAAsE;YACtE,MAAM,YAAY,GAAW,YAAY,CAAC,KAAK,CAAC;YAChD,MAAM,QAAQ,GAAW,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/D,MAAM,MAAM,GAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,WAAW,GAAW,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC1D,8EAA8E;YAC9E,YAAY,GAAG,QAAQ,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,sGAAsG;QACtG,MAAM,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AA9DD,kEA8DC","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 { Text } from '@rushstack/node-core-library';\nimport type { ITerminalProvider, TerminalProviderSeverity } from './ITerminalProvider';\n\n/**\n * @beta\n */\nexport interface IPrefixProxyTerminalProviderOptionsBase {\n /**\n * The {@link ITerminalProvider} that will be wrapped.\n */\n terminalProvider: ITerminalProvider;\n}\n\n/**\n * Options for {@link PrefixProxyTerminalProvider}, with a static prefix.\n *\n * @beta\n */\nexport interface IStaticPrefixProxyTerminalProviderOptions extends IPrefixProxyTerminalProviderOptionsBase {\n /**\n * The prefix that should be added to each line of output.\n */\n prefix: string;\n}\n\n/**\n * Options for {@link PrefixProxyTerminalProvider}.\n *\n * @beta\n */\nexport interface IDynamicPrefixProxyTerminalProviderOptions extends IPrefixProxyTerminalProviderOptionsBase {\n /**\n * A function that returns the prefix that should be added to each line of output. This is useful\n * for prefixing each line with a timestamp.\n */\n getPrefix: () => string;\n}\n\n/**\n * @beta\n */\nexport type IPrefixProxyTerminalProviderOptions =\n | IStaticPrefixProxyTerminalProviderOptions\n | IDynamicPrefixProxyTerminalProviderOptions;\n\n/**\n * Wraps an existing {@link ITerminalProvider} that prefixes each line of output with a specified\n * prefix string.\n *\n * @beta\n */\nexport class PrefixProxyTerminalProvider implements ITerminalProvider {\n private readonly _parentTerminalProvider: ITerminalProvider;\n private readonly _getPrefix: () => string;\n private readonly _newlineRegex: RegExp;\n private _isOnNewline: boolean;\n\n public constructor(options: IPrefixProxyTerminalProviderOptions) {\n const { terminalProvider } = options;\n\n this._parentTerminalProvider = terminalProvider;\n\n if ((options as IStaticPrefixProxyTerminalProviderOptions).prefix !== undefined) {\n const { prefix } = options as IStaticPrefixProxyTerminalProviderOptions;\n this._getPrefix = () => prefix;\n } else {\n const { getPrefix } = options as IDynamicPrefixProxyTerminalProviderOptions;\n this._getPrefix = getPrefix;\n }\n\n this._isOnNewline = true;\n\n // eslint-disable-next-line @rushstack/security/no-unsafe-regexp\n this._newlineRegex = new RegExp(`${Text.escapeRegExp(terminalProvider.eolCharacter)}|\\\\n`, 'g');\n }\n\n /** @override */\n public get supportsColor(): boolean {\n return this._parentTerminalProvider.supportsColor;\n }\n\n /** @override */\n public get eolCharacter(): string {\n return this._parentTerminalProvider.eolCharacter;\n }\n\n /** @override */\n public write(data: string, severity: TerminalProviderSeverity): void {\n // We need to track newlines to ensure that the prefix is added to each line\n let currentIndex: number = 0;\n // eslint-disable-next-line @rushstack/no-new-null\n let newlineMatch: RegExpExecArray | null;\n\n while ((newlineMatch = this._newlineRegex.exec(data))) {\n // Extract the line, add the prefix, and write it out with the newline\n const newlineIndex: number = newlineMatch.index;\n const newIndex: number = newlineIndex + newlineMatch[0].length;\n const prefix: string = this._isOnNewline ? this._getPrefix() : '';\n const dataToWrite: string = `${prefix}${data.substring(currentIndex, newIndex)}`;\n this._parentTerminalProvider.write(dataToWrite, severity);\n // Update the currentIndex to start the search from the char after the newline\n currentIndex = newIndex;\n this._isOnNewline = true;\n }\n\n // The remaining data is not postfixed by a newline, so write out the data and set _isNewline to false\n const remainingData: string = data.substring(currentIndex);\n if (remainingData.length) {\n const prefix: string = this._isOnNewline ? this._getPrefix() : '';\n this._parentTerminalProvider.write(`${prefix}${remainingData}`, severity);\n this._isOnNewline = false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"PrefixProxyTerminalProvider.js","sourceRoot":"","sources":["../src/PrefixProxyTerminalProvider.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,oEAAoD;AA6CpD;;;;;GAKG;AACH,MAAa,2BAA2B;IAMtC,YAAmB,OAA4C;QAC7D,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC;QAErC,IAAI,CAAC,uBAAuB,GAAG,gBAAgB,CAAC;QAEhD,IAAK,OAAqD,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChF,MAAM,EAAE,MAAM,EAAE,GAAG,OAAoD,CAAC;YACxE,IAAI,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,SAAS,EAAE,GAAG,OAAqD,CAAC;YAC5E,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAEzB,IAAI,CAAC,aAAa,GAAG,IAAI,MAAM,CAAC,GAAG,wBAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAClG,CAAC;IAED,gBAAgB;IAChB,IAAW,aAAa;QACtB,OAAO,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;IACpD,CAAC;IAED,gBAAgB;IAChB,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;IACnD,CAAC;IAED,gBAAgB;IACT,KAAK,CAAC,IAAY,EAAE,QAAkC;QAC3D,4EAA4E;QAC5E,IAAI,YAAY,GAAW,CAAC,CAAC;QAC7B,IAAI,YAAoC,CAAC;QAEzC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACtD,sEAAsE;YACtE,MAAM,YAAY,GAAW,YAAY,CAAC,KAAK,CAAC;YAChD,MAAM,QAAQ,GAAW,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC/D,MAAM,MAAM,GAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,MAAM,WAAW,GAAW,GAAG,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC;YACjF,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC1D,8EAA8E;YAC9E,YAAY,GAAG,QAAQ,CAAC;YACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QAED,sGAAsG;QACtG,MAAM,aAAa,GAAW,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,MAAM,GAAW,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,GAAG,MAAM,GAAG,aAAa,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC1E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;IACH,CAAC;CACF;AA5DD,kEA4DC","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 { Text } from '@rushstack/node-core-library';\nimport type { ITerminalProvider, TerminalProviderSeverity } from './ITerminalProvider';\n\n/**\n * @beta\n */\nexport interface IPrefixProxyTerminalProviderOptionsBase {\n /**\n * The {@link ITerminalProvider} that will be wrapped.\n */\n terminalProvider: ITerminalProvider;\n}\n\n/**\n * Options for {@link PrefixProxyTerminalProvider}, with a static prefix.\n *\n * @beta\n */\nexport interface IStaticPrefixProxyTerminalProviderOptions extends IPrefixProxyTerminalProviderOptionsBase {\n /**\n * The prefix that should be added to each line of output.\n */\n prefix: string;\n}\n\n/**\n * Options for {@link PrefixProxyTerminalProvider}.\n *\n * @beta\n */\nexport interface IDynamicPrefixProxyTerminalProviderOptions extends IPrefixProxyTerminalProviderOptionsBase {\n /**\n * A function that returns the prefix that should be added to each line of output. This is useful\n * for prefixing each line with a timestamp.\n */\n getPrefix: () => string;\n}\n\n/**\n * @beta\n */\nexport type IPrefixProxyTerminalProviderOptions =\n | IStaticPrefixProxyTerminalProviderOptions\n | IDynamicPrefixProxyTerminalProviderOptions;\n\n/**\n * Wraps an existing {@link ITerminalProvider} that prefixes each line of output with a specified\n * prefix string.\n *\n * @beta\n */\nexport class PrefixProxyTerminalProvider implements ITerminalProvider {\n private readonly _parentTerminalProvider: ITerminalProvider;\n private readonly _getPrefix: () => string;\n private readonly _newlineRegex: RegExp;\n private _isOnNewline: boolean;\n\n public constructor(options: IPrefixProxyTerminalProviderOptions) {\n const { terminalProvider } = options;\n\n this._parentTerminalProvider = terminalProvider;\n\n if ((options as IStaticPrefixProxyTerminalProviderOptions).prefix !== undefined) {\n const { prefix } = options as IStaticPrefixProxyTerminalProviderOptions;\n this._getPrefix = () => prefix;\n } else {\n const { getPrefix } = options as IDynamicPrefixProxyTerminalProviderOptions;\n this._getPrefix = getPrefix;\n }\n\n this._isOnNewline = true;\n\n this._newlineRegex = new RegExp(`${Text.escapeRegExp(terminalProvider.eolCharacter)}|\\\\n`, 'g');\n }\n\n /** @override */\n public get supportsColor(): boolean {\n return this._parentTerminalProvider.supportsColor;\n }\n\n /** @override */\n public get eolCharacter(): string {\n return this._parentTerminalProvider.eolCharacter;\n }\n\n /** @override */\n public write(data: string, severity: TerminalProviderSeverity): void {\n // We need to track newlines to ensure that the prefix is added to each line\n let currentIndex: number = 0;\n let newlineMatch: RegExpExecArray | null;\n\n while ((newlineMatch = this._newlineRegex.exec(data))) {\n // Extract the line, add the prefix, and write it out with the newline\n const newlineIndex: number = newlineMatch.index;\n const newIndex: number = newlineIndex + newlineMatch[0].length;\n const prefix: string = this._isOnNewline ? this._getPrefix() : '';\n const dataToWrite: string = `${prefix}${data.substring(currentIndex, newIndex)}`;\n this._parentTerminalProvider.write(dataToWrite, severity);\n // Update the currentIndex to start the search from the char after the newline\n currentIndex = newIndex;\n this._isOnNewline = true;\n }\n\n // The remaining data is not postfixed by a newline, so write out the data and set _isNewline to false\n const remainingData: string = data.substring(currentIndex);\n if (remainingData.length) {\n const prefix: string = this._isOnNewline ? this._getPrefix() : '';\n this._parentTerminalProvider.write(`${prefix}${remainingData}`, severity);\n this._isOnNewline = false;\n }\n }\n}\n"]}
package/lib/Terminal.d.ts CHANGED
@@ -6,7 +6,7 @@ import type { ITerminal, TerminalWriteParameters } from './ITerminal';
6
6
  * @beta
7
7
  */
8
8
  export declare class Terminal implements ITerminal {
9
- private _providers;
9
+ private readonly _providers;
10
10
  constructor(provider: ITerminalProvider);
11
11
  /**
12
12
  * {@inheritdoc ITerminal.registerProvider}
@@ -57,7 +57,6 @@ export declare class Terminal implements ITerminal {
57
57
  */
58
58
  writeDebugLine(...messageParts: TerminalWriteParameters): void;
59
59
  private _writeSegmentsToProviders;
60
- private _serializeLegacyColorableSequence;
61
60
  private _normalizeWriteParameters;
62
61
  }
63
62
  //# sourceMappingURL=Terminal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Terminal.d.ts","sourceRoot":"","sources":["../src/Terminal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAA4B,MAAM,qBAAqB,CAAC;AAEvF,OAAO,KAAK,EAAE,SAAS,EAAyB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAsC7F;;;;GAIG;AACH,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,UAAU,CAAyB;gBAExB,QAAQ,EAAE,iBAAiB;IAK9C;;OAEG;IACI,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI1D;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAM5D;;OAEG;IACI,KAAK,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAK5D;;OAEG;IACI,SAAS,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKhE;;OAEG;IACI,YAAY,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAcnE;;OAEG;IACI,gBAAgB,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAcvE;;OAEG;IACI,UAAU,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAYjE;;OAEG;IACI,cAAc,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAYrE;;OAEG;IACI,YAAY,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKnE;;OAEG;IACI,gBAAgB,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKvE;;OAEG;IACI,UAAU,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKjE;;OAEG;IACI,cAAc,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKrE,OAAO,CAAC,yBAAyB;IA6DjC,OAAO,CAAC,iCAAiC;IA6KzC,OAAO,CAAC,yBAAyB;CAelC"}
1
+ {"version":3,"file":"Terminal.d.ts","sourceRoot":"","sources":["../src/Terminal.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAA4B,MAAM,qBAAqB,CAAC;AAEvF,OAAO,KAAK,EAAE,SAAS,EAAyB,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAG7F;;;;GAIG;AACH,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;gBAEjC,QAAQ,EAAE,iBAAiB;IAI9C;;OAEG;IACI,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI1D;;OAEG;IACI,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAI5D;;OAEG;IACI,KAAK,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAK5D;;OAEG;IACI,SAAS,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKhE;;OAEG;IACI,YAAY,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAcnE;;OAEG;IACI,gBAAgB,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAcvE;;OAEG;IACI,UAAU,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAYjE;;OAEG;IACI,cAAc,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAYrE;;OAEG;IACI,YAAY,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKnE;;OAEG;IACI,gBAAgB,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKvE;;OAEG;IACI,UAAU,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKjE;;OAEG;IACI,cAAc,CAAC,GAAG,YAAY,EAAE,uBAAuB,GAAG,IAAI;IAKrE,OAAO,CAAC,yBAAyB;IA0CjC,OAAO,CAAC,yBAAyB;CAelC"}
package/lib/Terminal.js CHANGED
@@ -6,33 +6,6 @@ exports.Terminal = void 0;
6
6
  const ITerminalProvider_1 = require("./ITerminalProvider");
7
7
  const Colorize_1 = require("./Colorize");
8
8
  const AnsiEscape_1 = require("./AnsiEscape");
9
- /**
10
- * Colors used with {@link ILegacyColorableSequence}.
11
- */
12
- var ColorValue;
13
- (function (ColorValue) {
14
- ColorValue[ColorValue["Black"] = 0] = "Black";
15
- ColorValue[ColorValue["Red"] = 1] = "Red";
16
- ColorValue[ColorValue["Green"] = 2] = "Green";
17
- ColorValue[ColorValue["Yellow"] = 3] = "Yellow";
18
- ColorValue[ColorValue["Blue"] = 4] = "Blue";
19
- ColorValue[ColorValue["Magenta"] = 5] = "Magenta";
20
- ColorValue[ColorValue["Cyan"] = 6] = "Cyan";
21
- ColorValue[ColorValue["White"] = 7] = "White";
22
- ColorValue[ColorValue["Gray"] = 8] = "Gray";
23
- })(ColorValue || (ColorValue = {}));
24
- /**
25
- * Text styles used with {@link ILegacyColorableSequence}.
26
- */
27
- var TextAttribute;
28
- (function (TextAttribute) {
29
- TextAttribute[TextAttribute["Bold"] = 0] = "Bold";
30
- TextAttribute[TextAttribute["Dim"] = 1] = "Dim";
31
- TextAttribute[TextAttribute["Underline"] = 2] = "Underline";
32
- TextAttribute[TextAttribute["Blink"] = 3] = "Blink";
33
- TextAttribute[TextAttribute["InvertColor"] = 4] = "InvertColor";
34
- TextAttribute[TextAttribute["Hidden"] = 5] = "Hidden";
35
- })(TextAttribute || (TextAttribute = {}));
36
9
  /**
37
10
  * This class facilitates writing to a console.
38
11
  *
@@ -40,8 +13,7 @@ var TextAttribute;
40
13
  */
41
14
  class Terminal {
42
15
  constructor(provider) {
43
- this._providers = new Set();
44
- this._providers.add(provider);
16
+ this._providers = new Set([provider]);
45
17
  }
46
18
  /**
47
19
  * {@inheritdoc ITerminal.registerProvider}
@@ -53,9 +25,7 @@ class Terminal {
53
25
  * {@inheritdoc ITerminal.unregisterProvider}
54
26
  */
55
27
  unregisterProvider(provider) {
56
- if (this._providers.has(provider)) {
57
- this._providers.delete(provider);
58
- }
28
+ this._providers.delete(provider);
59
29
  }
60
30
  /**
61
31
  * {@inheritdoc ITerminal.write}
@@ -132,26 +102,7 @@ class Terminal {
132
102
  this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.debug, true);
133
103
  }
134
104
  _writeSegmentsToProviders(segments, severity, followedByEol) {
135
- const linesSegments = [[]];
136
- let currentLineSegments = linesSegments[0];
137
- for (const segment of segments) {
138
- if (typeof segment === 'string') {
139
- currentLineSegments.push(segment);
140
- }
141
- else {
142
- if (segment.isEol) {
143
- linesSegments.push([]);
144
- currentLineSegments = linesSegments[linesSegments.length - 1];
145
- }
146
- else {
147
- currentLineSegments.push(this._serializeLegacyColorableSequence(segment));
148
- }
149
- }
150
- }
151
- const lines = [];
152
- for (const lineSegments of linesSegments) {
153
- lines.push(lineSegments.join(''));
154
- }
105
+ const lines = [segments.join('')];
155
106
  if (followedByEol) {
156
107
  lines.push('');
157
108
  }
@@ -184,151 +135,6 @@ class Terminal {
184
135
  provider.write(textToWrite, severity);
185
136
  }
186
137
  }
187
- _serializeLegacyColorableSequence(segment) {
188
- const startColorCodes = [];
189
- const endColorCodes = [];
190
- switch (segment.foregroundColor) {
191
- case ColorValue.Black: {
192
- startColorCodes.push(Colorize_1.SgrParameterAttribute.BlackForeground);
193
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
194
- break;
195
- }
196
- case ColorValue.Red: {
197
- startColorCodes.push(Colorize_1.SgrParameterAttribute.RedForeground);
198
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
199
- break;
200
- }
201
- case ColorValue.Green: {
202
- startColorCodes.push(Colorize_1.SgrParameterAttribute.GreenForeground);
203
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
204
- break;
205
- }
206
- case ColorValue.Yellow: {
207
- startColorCodes.push(Colorize_1.SgrParameterAttribute.YellowForeground);
208
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
209
- break;
210
- }
211
- case ColorValue.Blue: {
212
- startColorCodes.push(Colorize_1.SgrParameterAttribute.BlueForeground);
213
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
214
- break;
215
- }
216
- case ColorValue.Magenta: {
217
- startColorCodes.push(Colorize_1.SgrParameterAttribute.MagentaForeground);
218
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
219
- break;
220
- }
221
- case ColorValue.Cyan: {
222
- startColorCodes.push(Colorize_1.SgrParameterAttribute.CyanForeground);
223
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
224
- break;
225
- }
226
- case ColorValue.White: {
227
- startColorCodes.push(Colorize_1.SgrParameterAttribute.WhiteForeground);
228
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
229
- break;
230
- }
231
- case ColorValue.Gray: {
232
- startColorCodes.push(Colorize_1.SgrParameterAttribute.GrayForeground);
233
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultForeground);
234
- break;
235
- }
236
- }
237
- switch (segment.backgroundColor) {
238
- case ColorValue.Black: {
239
- startColorCodes.push(Colorize_1.SgrParameterAttribute.BlackBackground);
240
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
241
- break;
242
- }
243
- case ColorValue.Red: {
244
- startColorCodes.push(Colorize_1.SgrParameterAttribute.RedBackground);
245
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
246
- break;
247
- }
248
- case ColorValue.Green: {
249
- startColorCodes.push(Colorize_1.SgrParameterAttribute.GreenBackground);
250
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
251
- break;
252
- }
253
- case ColorValue.Yellow: {
254
- startColorCodes.push(Colorize_1.SgrParameterAttribute.YellowBackground);
255
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
256
- break;
257
- }
258
- case ColorValue.Blue: {
259
- startColorCodes.push(Colorize_1.SgrParameterAttribute.BlueBackground);
260
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
261
- break;
262
- }
263
- case ColorValue.Magenta: {
264
- startColorCodes.push(Colorize_1.SgrParameterAttribute.MagentaBackground);
265
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
266
- break;
267
- }
268
- case ColorValue.Cyan: {
269
- startColorCodes.push(Colorize_1.SgrParameterAttribute.CyanBackground);
270
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
271
- break;
272
- }
273
- case ColorValue.White: {
274
- startColorCodes.push(Colorize_1.SgrParameterAttribute.WhiteBackground);
275
- endColorCodes.push(Colorize_1.SgrParameterAttribute.DefaultBackground);
276
- break;
277
- }
278
- case ColorValue.Gray: {
279
- startColorCodes.push(Colorize_1.SgrParameterAttribute.GrayBackground);
280
- endColorCodes.push(49);
281
- break;
282
- }
283
- }
284
- if (segment.textAttributes) {
285
- for (const textAttribute of segment.textAttributes) {
286
- switch (textAttribute) {
287
- case TextAttribute.Bold: {
288
- startColorCodes.push(Colorize_1.SgrParameterAttribute.Bold);
289
- endColorCodes.push(Colorize_1.SgrParameterAttribute.NormalColorOrIntensity);
290
- break;
291
- }
292
- case TextAttribute.Dim: {
293
- startColorCodes.push(Colorize_1.SgrParameterAttribute.Dim);
294
- endColorCodes.push(Colorize_1.SgrParameterAttribute.NormalColorOrIntensity);
295
- break;
296
- }
297
- case TextAttribute.Underline: {
298
- startColorCodes.push(Colorize_1.SgrParameterAttribute.Underline);
299
- endColorCodes.push(Colorize_1.SgrParameterAttribute.UnderlineOff);
300
- break;
301
- }
302
- case TextAttribute.Blink: {
303
- startColorCodes.push(Colorize_1.SgrParameterAttribute.Blink);
304
- endColorCodes.push(Colorize_1.SgrParameterAttribute.BlinkOff);
305
- break;
306
- }
307
- case TextAttribute.InvertColor: {
308
- startColorCodes.push(Colorize_1.SgrParameterAttribute.InvertColor);
309
- endColorCodes.push(Colorize_1.SgrParameterAttribute.InvertColorOff);
310
- break;
311
- }
312
- case TextAttribute.Hidden: {
313
- startColorCodes.push(Colorize_1.SgrParameterAttribute.Hidden);
314
- endColorCodes.push(Colorize_1.SgrParameterAttribute.HiddenOff);
315
- break;
316
- }
317
- }
318
- }
319
- }
320
- const resultSegments = [];
321
- for (let j = 0; j < startColorCodes.length; j++) {
322
- const code = startColorCodes[j];
323
- resultSegments.push(AnsiEscape_1.AnsiEscape.getEscapeSequenceForAnsiCode(code));
324
- }
325
- resultSegments.push(segment.text);
326
- for (let j = endColorCodes.length - 1; j >= 0; j--) {
327
- const code = endColorCodes[j];
328
- resultSegments.push(AnsiEscape_1.AnsiEscape.getEscapeSequenceForAnsiCode(code));
329
- }
330
- return resultSegments.join('');
331
- }
332
138
  _normalizeWriteParameters(parameters) {
333
139
  if (parameters.length === 0) {
334
140
  return { parts: [], options: {} };
@@ -1 +1 @@
1
- {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../src/Terminal.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 { type ITerminalProvider, TerminalProviderSeverity } from './ITerminalProvider';\nimport { Colorize, SgrParameterAttribute } from './Colorize';\nimport type { ITerminal, ITerminalWriteOptions, TerminalWriteParameters } from './ITerminal';\nimport { AnsiEscape } from './AnsiEscape';\n\n/**\n * Colors used with {@link ILegacyColorableSequence}.\n */\nenum ColorValue {\n Black,\n Red,\n Green,\n Yellow,\n Blue,\n Magenta,\n Cyan,\n White,\n Gray\n}\n\n/**\n * Text styles used with {@link ILegacyColorableSequence}.\n */\nenum TextAttribute {\n Bold,\n Dim,\n Underline,\n Blink,\n InvertColor,\n Hidden\n}\n\ninterface ILegacyColorableSequence {\n text: string;\n isEol?: boolean;\n foregroundColor?: ColorValue;\n backgroundColor?: ColorValue;\n textAttributes?: TextAttribute[];\n}\n\n/**\n * This class facilitates writing to a console.\n *\n * @beta\n */\nexport class Terminal implements ITerminal {\n private _providers: Set<ITerminalProvider>;\n\n public constructor(provider: ITerminalProvider) {\n this._providers = new Set<ITerminalProvider>();\n this._providers.add(provider);\n }\n\n /**\n * {@inheritdoc ITerminal.registerProvider}\n */\n public registerProvider(provider: ITerminalProvider): void {\n this._providers.add(provider);\n }\n\n /**\n * {@inheritdoc ITerminal.unregisterProvider}\n */\n public unregisterProvider(provider: ITerminalProvider): void {\n if (this._providers.has(provider)) {\n this._providers.delete(provider);\n }\n }\n\n /**\n * {@inheritdoc ITerminal.write}\n */\n public write(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.log, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeLine}\n */\n public writeLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.log, true);\n }\n\n /**\n * {@inheritdoc ITerminal.writeWarning}\n */\n public writeWarning(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes\n ? parts\n : parts.map((part): string => Colorize.yellow(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.warning,\n false\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeWarningLine}\n */\n public writeWarningLine(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes\n ? parts\n : parts.map((part): string => Colorize.yellow(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.warning,\n true\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeError}\n */\n public writeError(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes ? parts : parts.map((part): string => Colorize.red(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.error,\n false\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeErrorLine}\n */\n public writeErrorLine(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes ? parts : parts.map((part): string => Colorize.red(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.error,\n true\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeVerbose}\n */\n public writeVerbose(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.verbose, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeVerboseLine}\n */\n public writeVerboseLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.verbose, true);\n }\n\n /**\n * {@inheritdoc ITerminal.writeDebug}\n */\n public writeDebug(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.debug, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeDebugLine}\n */\n public writeDebugLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.debug, true);\n }\n\n private _writeSegmentsToProviders(\n segments: (string | ILegacyColorableSequence)[],\n severity: TerminalProviderSeverity,\n followedByEol: boolean\n ): void {\n const linesSegments: string[][] = [[]];\n let currentLineSegments: string[] = linesSegments[0];\n for (const segment of segments) {\n if (typeof segment === 'string') {\n currentLineSegments.push(segment);\n } else {\n if (segment.isEol) {\n linesSegments.push([]);\n currentLineSegments = linesSegments[linesSegments.length - 1];\n } else {\n currentLineSegments.push(this._serializeLegacyColorableSequence(segment));\n }\n }\n }\n\n const lines: string[] = [];\n for (const lineSegments of linesSegments) {\n lines.push(lineSegments.join(''));\n }\n\n if (followedByEol) {\n lines.push('');\n }\n\n let linesWithoutColor: string[] | undefined;\n\n const concatenatedLinesWithColorByNewlineChar: Map<string, string> = new Map();\n const concatenatedLinesWithoutColorByNewlineChar: Map<string, string> = new Map();\n for (const provider of this._providers) {\n let textToWrite: string | undefined;\n const eol: string = provider.eolCharacter;\n if (provider.supportsColor) {\n textToWrite = concatenatedLinesWithColorByNewlineChar.get(eol);\n if (!textToWrite) {\n textToWrite = lines.join(eol);\n concatenatedLinesWithColorByNewlineChar.set(eol, textToWrite);\n }\n } else {\n textToWrite = concatenatedLinesWithoutColorByNewlineChar.get(eol);\n if (!textToWrite) {\n if (!linesWithoutColor) {\n linesWithoutColor = [];\n for (const line of lines) {\n linesWithoutColor.push(AnsiEscape.removeCodes(line));\n }\n }\n\n textToWrite = linesWithoutColor.join(eol);\n concatenatedLinesWithoutColorByNewlineChar.set(eol, textToWrite);\n }\n }\n\n provider.write(textToWrite, severity);\n }\n }\n\n private _serializeLegacyColorableSequence(segment: ILegacyColorableSequence): string {\n const startColorCodes: number[] = [];\n const endColorCodes: number[] = [];\n switch (segment.foregroundColor) {\n case ColorValue.Black: {\n startColorCodes.push(SgrParameterAttribute.BlackForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Red: {\n startColorCodes.push(SgrParameterAttribute.RedForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Green: {\n startColorCodes.push(SgrParameterAttribute.GreenForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Yellow: {\n startColorCodes.push(SgrParameterAttribute.YellowForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Blue: {\n startColorCodes.push(SgrParameterAttribute.BlueForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Magenta: {\n startColorCodes.push(SgrParameterAttribute.MagentaForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Cyan: {\n startColorCodes.push(SgrParameterAttribute.CyanForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.White: {\n startColorCodes.push(SgrParameterAttribute.WhiteForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n\n case ColorValue.Gray: {\n startColorCodes.push(SgrParameterAttribute.GrayForeground);\n endColorCodes.push(SgrParameterAttribute.DefaultForeground);\n break;\n }\n }\n\n switch (segment.backgroundColor) {\n case ColorValue.Black: {\n startColorCodes.push(SgrParameterAttribute.BlackBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Red: {\n startColorCodes.push(SgrParameterAttribute.RedBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Green: {\n startColorCodes.push(SgrParameterAttribute.GreenBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Yellow: {\n startColorCodes.push(SgrParameterAttribute.YellowBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Blue: {\n startColorCodes.push(SgrParameterAttribute.BlueBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Magenta: {\n startColorCodes.push(SgrParameterAttribute.MagentaBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Cyan: {\n startColorCodes.push(SgrParameterAttribute.CyanBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.White: {\n startColorCodes.push(SgrParameterAttribute.WhiteBackground);\n endColorCodes.push(SgrParameterAttribute.DefaultBackground);\n break;\n }\n\n case ColorValue.Gray: {\n startColorCodes.push(SgrParameterAttribute.GrayBackground);\n endColorCodes.push(49);\n break;\n }\n }\n\n if (segment.textAttributes) {\n for (const textAttribute of segment.textAttributes) {\n switch (textAttribute) {\n case TextAttribute.Bold: {\n startColorCodes.push(SgrParameterAttribute.Bold);\n endColorCodes.push(SgrParameterAttribute.NormalColorOrIntensity);\n break;\n }\n\n case TextAttribute.Dim: {\n startColorCodes.push(SgrParameterAttribute.Dim);\n endColorCodes.push(SgrParameterAttribute.NormalColorOrIntensity);\n break;\n }\n\n case TextAttribute.Underline: {\n startColorCodes.push(SgrParameterAttribute.Underline);\n endColorCodes.push(SgrParameterAttribute.UnderlineOff);\n break;\n }\n\n case TextAttribute.Blink: {\n startColorCodes.push(SgrParameterAttribute.Blink);\n endColorCodes.push(SgrParameterAttribute.BlinkOff);\n break;\n }\n\n case TextAttribute.InvertColor: {\n startColorCodes.push(SgrParameterAttribute.InvertColor);\n endColorCodes.push(SgrParameterAttribute.InvertColorOff);\n break;\n }\n\n case TextAttribute.Hidden: {\n startColorCodes.push(SgrParameterAttribute.Hidden);\n endColorCodes.push(SgrParameterAttribute.HiddenOff);\n break;\n }\n }\n }\n }\n\n const resultSegments: string[] = [];\n for (let j: number = 0; j < startColorCodes.length; j++) {\n const code: number = startColorCodes[j];\n resultSegments.push(AnsiEscape.getEscapeSequenceForAnsiCode(code));\n }\n\n resultSegments.push(segment.text);\n\n for (let j: number = endColorCodes.length - 1; j >= 0; j--) {\n const code: number = endColorCodes[j];\n resultSegments.push(AnsiEscape.getEscapeSequenceForAnsiCode(code));\n }\n\n return resultSegments.join('');\n }\n\n private _normalizeWriteParameters(parameters: TerminalWriteParameters): {\n parts: string[];\n options: ITerminalWriteOptions;\n } {\n if (parameters.length === 0) {\n return { parts: [], options: {} };\n } else {\n const lastParameter: string | ITerminalWriteOptions = parameters[parameters.length - 1];\n if (typeof lastParameter === 'string') {\n return { parts: parameters as string[], options: {} };\n } else {\n return { parts: parameters.slice(0, -1) as string[], options: lastParameter };\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"Terminal.js","sourceRoot":"","sources":["../src/Terminal.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 { type ITerminalProvider, TerminalProviderSeverity } from './ITerminalProvider';\nimport { Colorize } from './Colorize';\nimport type { ITerminal, ITerminalWriteOptions, TerminalWriteParameters } from './ITerminal';\nimport { AnsiEscape } from './AnsiEscape';\n\n/**\n * This class facilitates writing to a console.\n *\n * @beta\n */\nexport class Terminal implements ITerminal {\n private readonly _providers: Set<ITerminalProvider>;\n\n public constructor(provider: ITerminalProvider) {\n this._providers = new Set<ITerminalProvider>([provider]);\n }\n\n /**\n * {@inheritdoc ITerminal.registerProvider}\n */\n public registerProvider(provider: ITerminalProvider): void {\n this._providers.add(provider);\n }\n\n /**\n * {@inheritdoc ITerminal.unregisterProvider}\n */\n public unregisterProvider(provider: ITerminalProvider): void {\n this._providers.delete(provider);\n }\n\n /**\n * {@inheritdoc ITerminal.write}\n */\n public write(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.log, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeLine}\n */\n public writeLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.log, true);\n }\n\n /**\n * {@inheritdoc ITerminal.writeWarning}\n */\n public writeWarning(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes\n ? parts\n : parts.map((part): string => Colorize.yellow(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.warning,\n false\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeWarningLine}\n */\n public writeWarningLine(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes\n ? parts\n : parts.map((part): string => Colorize.yellow(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.warning,\n true\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeError}\n */\n public writeError(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes ? parts : parts.map((part): string => Colorize.red(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.error,\n false\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeErrorLine}\n */\n public writeErrorLine(...messageParts: TerminalWriteParameters): void {\n const {\n parts,\n options: { doNotOverrideSgrCodes }\n } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(\n doNotOverrideSgrCodes ? parts : parts.map((part): string => Colorize.red(AnsiEscape.removeCodes(part))),\n TerminalProviderSeverity.error,\n true\n );\n }\n\n /**\n * {@inheritdoc ITerminal.writeVerbose}\n */\n public writeVerbose(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.verbose, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeVerboseLine}\n */\n public writeVerboseLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.verbose, true);\n }\n\n /**\n * {@inheritdoc ITerminal.writeDebug}\n */\n public writeDebug(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.debug, false);\n }\n\n /**\n * {@inheritdoc ITerminal.writeDebugLine}\n */\n public writeDebugLine(...messageParts: TerminalWriteParameters): void {\n const { parts } = this._normalizeWriteParameters(messageParts);\n this._writeSegmentsToProviders(parts, TerminalProviderSeverity.debug, true);\n }\n\n private _writeSegmentsToProviders(\n segments: string[],\n severity: TerminalProviderSeverity,\n followedByEol: boolean\n ): void {\n const lines: string[] = [segments.join('')];\n if (followedByEol) {\n lines.push('');\n }\n\n let linesWithoutColor: string[] | undefined;\n\n const concatenatedLinesWithColorByNewlineChar: Map<string, string> = new Map();\n const concatenatedLinesWithoutColorByNewlineChar: Map<string, string> = new Map();\n for (const provider of this._providers) {\n let textToWrite: string | undefined;\n const eol: string = provider.eolCharacter;\n if (provider.supportsColor) {\n textToWrite = concatenatedLinesWithColorByNewlineChar.get(eol);\n if (!textToWrite) {\n textToWrite = lines.join(eol);\n concatenatedLinesWithColorByNewlineChar.set(eol, textToWrite);\n }\n } else {\n textToWrite = concatenatedLinesWithoutColorByNewlineChar.get(eol);\n if (!textToWrite) {\n if (!linesWithoutColor) {\n linesWithoutColor = [];\n for (const line of lines) {\n linesWithoutColor.push(AnsiEscape.removeCodes(line));\n }\n }\n\n textToWrite = linesWithoutColor.join(eol);\n concatenatedLinesWithoutColorByNewlineChar.set(eol, textToWrite);\n }\n }\n\n provider.write(textToWrite, severity);\n }\n }\n\n private _normalizeWriteParameters(parameters: TerminalWriteParameters): {\n parts: string[];\n options: ITerminalWriteOptions;\n } {\n if (parameters.length === 0) {\n return { parts: [], options: {} };\n } else {\n const lastParameter: string | ITerminalWriteOptions = parameters[parameters.length - 1];\n if (typeof lastParameter === 'string') {\n return { parts: parameters as string[], options: {} };\n } else {\n return { parts: parameters.slice(0, -1) as string[], options: lastParameter };\n }\n }\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rushstack/terminal",
3
- "version": "0.15.3",
3
+ "version": "0.16.0",
4
4
  "description": "User interface primitives for console applications",
5
5
  "main": "lib/index.js",
6
6
  "typings": "dist/terminal.d.ts",
@@ -12,12 +12,12 @@
12
12
  },
13
13
  "dependencies": {
14
14
  "supports-color": "~8.1.1",
15
- "@rushstack/node-core-library": "5.13.1"
15
+ "@rushstack/node-core-library": "5.14.0"
16
16
  },
17
17
  "devDependencies": {
18
- "@rushstack/heft": "0.73.2",
18
+ "@rushstack/heft": "0.74.3",
19
19
  "@types/supports-color": "8.1.3",
20
- "local-eslint-config": "1.0.0",
20
+ "eslint": "~9.25.1",
21
21
  "decoupled-local-node-rig": "1.0.0"
22
22
  },
23
23
  "peerDependencies": {