@rushstack/terminal 0.7.24 → 0.8.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/dist/terminal.d.ts +487 -2
- package/dist/tsdoc-metadata.json +1 -1
- package/lib/AnsiEscape.d.ts +35 -0
- package/lib/AnsiEscape.d.ts.map +1 -0
- package/lib/AnsiEscape.js +136 -0
- package/lib/AnsiEscape.js.map +1 -0
- package/lib/Colorize.d.ts +79 -0
- package/lib/Colorize.d.ts.map +1 -0
- package/lib/Colorize.js +143 -0
- package/lib/Colorize.js.map +1 -0
- package/lib/ConsoleTerminalProvider.d.ts +48 -0
- package/lib/ConsoleTerminalProvider.d.ts.map +1 -0
- package/lib/ConsoleTerminalProvider.js +71 -0
- package/lib/ConsoleTerminalProvider.js.map +1 -0
- package/lib/ITerminal.d.ts +81 -0
- package/lib/ITerminal.d.ts.map +1 -0
- package/lib/ITerminal.js +5 -0
- package/lib/ITerminal.js.map +1 -0
- package/lib/ITerminalProvider.d.ts +54 -0
- package/lib/ITerminalProvider.d.ts.map +1 -0
- package/lib/ITerminalProvider.js +32 -0
- package/lib/ITerminalProvider.js.map +1 -0
- package/lib/MockWritable.d.ts.map +1 -1
- package/lib/MockWritable.js +3 -3
- package/lib/MockWritable.js.map +1 -1
- package/lib/PrefixProxyTerminalProvider.d.ts +57 -0
- package/lib/PrefixProxyTerminalProvider.d.ts.map +1 -0
- package/lib/PrefixProxyTerminalProvider.js +64 -0
- package/lib/PrefixProxyTerminalProvider.js.map +1 -0
- package/lib/PrintUtilities.d.ts +1 -1
- package/lib/PrintUtilities.d.ts.map +1 -1
- package/lib/PrintUtilities.js.map +1 -1
- package/lib/RemoveColorsTextRewriter.js +2 -2
- package/lib/RemoveColorsTextRewriter.js.map +1 -1
- package/lib/StringBufferTerminalProvider.d.ts +63 -0
- package/lib/StringBufferTerminalProvider.d.ts.map +1 -0
- package/lib/StringBufferTerminalProvider.js +107 -0
- package/lib/StringBufferTerminalProvider.js.map +1 -0
- package/lib/Terminal.d.ts +63 -0
- package/lib/Terminal.d.ts.map +1 -0
- package/lib/Terminal.js +348 -0
- package/lib/Terminal.js.map +1 -0
- package/lib/TerminalStreamWritable.d.ts +35 -0
- package/lib/TerminalStreamWritable.d.ts.map +1 -0
- package/lib/TerminalStreamWritable.js +53 -0
- package/lib/TerminalStreamWritable.js.map +1 -0
- package/lib/TerminalWritable.d.ts +1 -1
- package/lib/TerminalWritable.js +1 -1
- package/lib/TerminalWritable.js.map +1 -1
- package/lib/index.d.ts +24 -15
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +46 -29
- package/lib/index.js.map +1 -1
- package/package.json +7 -4
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type ITerminalProvider } from './ITerminalProvider';
|
|
2
|
+
import type { ITerminal, TerminalWriteParameters } from './ITerminal';
|
|
3
|
+
/**
|
|
4
|
+
* This class facilitates writing to a console.
|
|
5
|
+
*
|
|
6
|
+
* @beta
|
|
7
|
+
*/
|
|
8
|
+
export declare class Terminal implements ITerminal {
|
|
9
|
+
private _providers;
|
|
10
|
+
constructor(provider: ITerminalProvider);
|
|
11
|
+
/**
|
|
12
|
+
* {@inheritdoc ITerminal.registerProvider}
|
|
13
|
+
*/
|
|
14
|
+
registerProvider(provider: ITerminalProvider): void;
|
|
15
|
+
/**
|
|
16
|
+
* {@inheritdoc ITerminal.unregisterProvider}
|
|
17
|
+
*/
|
|
18
|
+
unregisterProvider(provider: ITerminalProvider): void;
|
|
19
|
+
/**
|
|
20
|
+
* {@inheritdoc ITerminal.write}
|
|
21
|
+
*/
|
|
22
|
+
write(...messageParts: TerminalWriteParameters): void;
|
|
23
|
+
/**
|
|
24
|
+
* {@inheritdoc ITerminal.writeLine}
|
|
25
|
+
*/
|
|
26
|
+
writeLine(...messageParts: TerminalWriteParameters): void;
|
|
27
|
+
/**
|
|
28
|
+
* {@inheritdoc ITerminal.writeWarning}
|
|
29
|
+
*/
|
|
30
|
+
writeWarning(...messageParts: TerminalWriteParameters): void;
|
|
31
|
+
/**
|
|
32
|
+
* {@inheritdoc ITerminal.writeWarningLine}
|
|
33
|
+
*/
|
|
34
|
+
writeWarningLine(...messageParts: TerminalWriteParameters): void;
|
|
35
|
+
/**
|
|
36
|
+
* {@inheritdoc ITerminal.writeError}
|
|
37
|
+
*/
|
|
38
|
+
writeError(...messageParts: TerminalWriteParameters): void;
|
|
39
|
+
/**
|
|
40
|
+
* {@inheritdoc ITerminal.writeErrorLine}
|
|
41
|
+
*/
|
|
42
|
+
writeErrorLine(...messageParts: TerminalWriteParameters): void;
|
|
43
|
+
/**
|
|
44
|
+
* {@inheritdoc ITerminal.writeVerbose}
|
|
45
|
+
*/
|
|
46
|
+
writeVerbose(...messageParts: TerminalWriteParameters): void;
|
|
47
|
+
/**
|
|
48
|
+
* {@inheritdoc ITerminal.writeVerboseLine}
|
|
49
|
+
*/
|
|
50
|
+
writeVerboseLine(...messageParts: TerminalWriteParameters): void;
|
|
51
|
+
/**
|
|
52
|
+
* {@inheritdoc ITerminal.writeDebug}
|
|
53
|
+
*/
|
|
54
|
+
writeDebug(...messageParts: TerminalWriteParameters): void;
|
|
55
|
+
/**
|
|
56
|
+
* {@inheritdoc ITerminal.writeDebugLine}
|
|
57
|
+
*/
|
|
58
|
+
writeDebugLine(...messageParts: TerminalWriteParameters): void;
|
|
59
|
+
private _writeSegmentsToProviders;
|
|
60
|
+
private _serializeLegacyColorableSequence;
|
|
61
|
+
private _normalizeWriteParameters;
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Terminal.d.ts.map
|
|
@@ -0,0 +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"}
|
package/lib/Terminal.js
ADDED
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
3
|
+
// See LICENSE in the project root for license information.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.Terminal = void 0;
|
|
6
|
+
const ITerminalProvider_1 = require("./ITerminalProvider");
|
|
7
|
+
const Colorize_1 = require("./Colorize");
|
|
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
|
+
/**
|
|
37
|
+
* This class facilitates writing to a console.
|
|
38
|
+
*
|
|
39
|
+
* @beta
|
|
40
|
+
*/
|
|
41
|
+
class Terminal {
|
|
42
|
+
constructor(provider) {
|
|
43
|
+
this._providers = new Set();
|
|
44
|
+
this._providers.add(provider);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* {@inheritdoc ITerminal.registerProvider}
|
|
48
|
+
*/
|
|
49
|
+
registerProvider(provider) {
|
|
50
|
+
this._providers.add(provider);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* {@inheritdoc ITerminal.unregisterProvider}
|
|
54
|
+
*/
|
|
55
|
+
unregisterProvider(provider) {
|
|
56
|
+
if (this._providers.has(provider)) {
|
|
57
|
+
this._providers.delete(provider);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* {@inheritdoc ITerminal.write}
|
|
62
|
+
*/
|
|
63
|
+
write(...messageParts) {
|
|
64
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
65
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.log, false);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* {@inheritdoc ITerminal.writeLine}
|
|
69
|
+
*/
|
|
70
|
+
writeLine(...messageParts) {
|
|
71
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
72
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.log, true);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* {@inheritdoc ITerminal.writeWarning}
|
|
76
|
+
*/
|
|
77
|
+
writeWarning(...messageParts) {
|
|
78
|
+
const { parts, options: { doNotOverrideSgrCodes } } = this._normalizeWriteParameters(messageParts);
|
|
79
|
+
this._writeSegmentsToProviders(doNotOverrideSgrCodes
|
|
80
|
+
? parts
|
|
81
|
+
: parts.map((part) => Colorize_1.Colorize.yellow(AnsiEscape_1.AnsiEscape.removeCodes(part))), ITerminalProvider_1.TerminalProviderSeverity.warning, false);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* {@inheritdoc ITerminal.writeWarningLine}
|
|
85
|
+
*/
|
|
86
|
+
writeWarningLine(...messageParts) {
|
|
87
|
+
const { parts, options: { doNotOverrideSgrCodes } } = this._normalizeWriteParameters(messageParts);
|
|
88
|
+
this._writeSegmentsToProviders(doNotOverrideSgrCodes
|
|
89
|
+
? parts
|
|
90
|
+
: parts.map((part) => Colorize_1.Colorize.yellow(AnsiEscape_1.AnsiEscape.removeCodes(part))), ITerminalProvider_1.TerminalProviderSeverity.warning, true);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* {@inheritdoc ITerminal.writeError}
|
|
94
|
+
*/
|
|
95
|
+
writeError(...messageParts) {
|
|
96
|
+
const { parts, options: { doNotOverrideSgrCodes } } = this._normalizeWriteParameters(messageParts);
|
|
97
|
+
this._writeSegmentsToProviders(doNotOverrideSgrCodes ? parts : parts.map((part) => Colorize_1.Colorize.red(AnsiEscape_1.AnsiEscape.removeCodes(part))), ITerminalProvider_1.TerminalProviderSeverity.error, false);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* {@inheritdoc ITerminal.writeErrorLine}
|
|
101
|
+
*/
|
|
102
|
+
writeErrorLine(...messageParts) {
|
|
103
|
+
const { parts, options: { doNotOverrideSgrCodes } } = this._normalizeWriteParameters(messageParts);
|
|
104
|
+
this._writeSegmentsToProviders(doNotOverrideSgrCodes ? parts : parts.map((part) => Colorize_1.Colorize.red(AnsiEscape_1.AnsiEscape.removeCodes(part))), ITerminalProvider_1.TerminalProviderSeverity.error, true);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* {@inheritdoc ITerminal.writeVerbose}
|
|
108
|
+
*/
|
|
109
|
+
writeVerbose(...messageParts) {
|
|
110
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
111
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.verbose, false);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* {@inheritdoc ITerminal.writeVerboseLine}
|
|
115
|
+
*/
|
|
116
|
+
writeVerboseLine(...messageParts) {
|
|
117
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
118
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.verbose, true);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* {@inheritdoc ITerminal.writeDebug}
|
|
122
|
+
*/
|
|
123
|
+
writeDebug(...messageParts) {
|
|
124
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
125
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.debug, false);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* {@inheritdoc ITerminal.writeDebugLine}
|
|
129
|
+
*/
|
|
130
|
+
writeDebugLine(...messageParts) {
|
|
131
|
+
const { parts } = this._normalizeWriteParameters(messageParts);
|
|
132
|
+
this._writeSegmentsToProviders(parts, ITerminalProvider_1.TerminalProviderSeverity.debug, true);
|
|
133
|
+
}
|
|
134
|
+
_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
|
+
}
|
|
155
|
+
if (followedByEol) {
|
|
156
|
+
lines.push('');
|
|
157
|
+
}
|
|
158
|
+
let linesWithoutColor;
|
|
159
|
+
const concatenatedLinesWithColorByNewlineChar = new Map();
|
|
160
|
+
const concatenatedLinesWithoutColorByNewlineChar = new Map();
|
|
161
|
+
for (const provider of this._providers) {
|
|
162
|
+
let textToWrite;
|
|
163
|
+
const eol = provider.eolCharacter;
|
|
164
|
+
if (provider.supportsColor) {
|
|
165
|
+
textToWrite = concatenatedLinesWithColorByNewlineChar.get(eol);
|
|
166
|
+
if (!textToWrite) {
|
|
167
|
+
textToWrite = lines.join(eol);
|
|
168
|
+
concatenatedLinesWithColorByNewlineChar.set(eol, textToWrite);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
textToWrite = concatenatedLinesWithoutColorByNewlineChar.get(eol);
|
|
173
|
+
if (!textToWrite) {
|
|
174
|
+
if (!linesWithoutColor) {
|
|
175
|
+
linesWithoutColor = [];
|
|
176
|
+
for (const line of lines) {
|
|
177
|
+
linesWithoutColor.push(AnsiEscape_1.AnsiEscape.removeCodes(line));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
textToWrite = linesWithoutColor.join(eol);
|
|
181
|
+
concatenatedLinesWithoutColorByNewlineChar.set(eol, textToWrite);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
provider.write(textToWrite, severity);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
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
|
+
_normalizeWriteParameters(parameters) {
|
|
333
|
+
if (parameters.length === 0) {
|
|
334
|
+
return { parts: [], options: {} };
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
const lastParameter = parameters[parameters.length - 1];
|
|
338
|
+
if (typeof lastParameter === 'string') {
|
|
339
|
+
return { parts: parameters, options: {} };
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
return { parts: parameters.slice(0, -1), options: lastParameter };
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
exports.Terminal = Terminal;
|
|
348
|
+
//# sourceMappingURL=Terminal.js.map
|
|
@@ -0,0 +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"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
/// <reference types="node" />
|
|
3
|
+
import { Writable, type WritableOptions } from 'stream';
|
|
4
|
+
import type { ITerminal } from './ITerminal';
|
|
5
|
+
import { TerminalProviderSeverity } from './ITerminalProvider';
|
|
6
|
+
/**
|
|
7
|
+
* Options for {@link TerminalStreamWritable}.
|
|
8
|
+
*
|
|
9
|
+
* @beta
|
|
10
|
+
*/
|
|
11
|
+
export interface ITerminalStreamWritableOptions {
|
|
12
|
+
/**
|
|
13
|
+
* The {@link ITerminal} that the Writable will write to.
|
|
14
|
+
*/
|
|
15
|
+
terminal: ITerminal;
|
|
16
|
+
/**
|
|
17
|
+
* The severity of the messages that will be written to the {@link ITerminal}.
|
|
18
|
+
*/
|
|
19
|
+
severity: TerminalProviderSeverity;
|
|
20
|
+
/**
|
|
21
|
+
* Options for the underlying Writable.
|
|
22
|
+
*/
|
|
23
|
+
writableOptions?: WritableOptions;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* A adapter to allow writing to a provided terminal using Writable streams.
|
|
27
|
+
*
|
|
28
|
+
* @beta
|
|
29
|
+
*/
|
|
30
|
+
export declare class TerminalStreamWritable extends Writable {
|
|
31
|
+
private _writeMethod;
|
|
32
|
+
constructor(options: ITerminalStreamWritableOptions);
|
|
33
|
+
_write(chunk: string | Buffer | Uint8Array, encoding: string, callback: (error?: Error | null) => void): void;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=TerminalStreamWritable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalStreamWritable.d.ts","sourceRoot":"","sources":["../src/TerminalStreamWritable.ts"],"names":[],"mappings":";;AAGA,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;;;GAIG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;OAEG;IACH,QAAQ,EAAE,SAAS,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,wBAAwB,CAAC;IACnC;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,SAAQ,QAAQ;IAClD,OAAO,CAAC,YAAY,CAAyB;gBAE1B,OAAO,EAAE,8BAA8B;IA0BnD,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,EACnC,QAAQ,EAAE,MAAM,EAEhB,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GACvC,IAAI;CAUR"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
3
|
+
// See LICENSE in the project root for license information.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.TerminalStreamWritable = void 0;
|
|
6
|
+
const stream_1 = require("stream");
|
|
7
|
+
const ITerminalProvider_1 = require("./ITerminalProvider");
|
|
8
|
+
/**
|
|
9
|
+
* A adapter to allow writing to a provided terminal using Writable streams.
|
|
10
|
+
*
|
|
11
|
+
* @beta
|
|
12
|
+
*/
|
|
13
|
+
class TerminalStreamWritable extends stream_1.Writable {
|
|
14
|
+
constructor(options) {
|
|
15
|
+
const { terminal, severity, writableOptions } = options;
|
|
16
|
+
super(writableOptions);
|
|
17
|
+
this._writev = undefined;
|
|
18
|
+
switch (severity) {
|
|
19
|
+
case ITerminalProvider_1.TerminalProviderSeverity.log:
|
|
20
|
+
this._writeMethod = terminal.write.bind(terminal);
|
|
21
|
+
break;
|
|
22
|
+
case ITerminalProvider_1.TerminalProviderSeverity.verbose:
|
|
23
|
+
this._writeMethod = terminal.writeVerbose.bind(terminal);
|
|
24
|
+
break;
|
|
25
|
+
case ITerminalProvider_1.TerminalProviderSeverity.debug:
|
|
26
|
+
this._writeMethod = terminal.writeDebug.bind(terminal);
|
|
27
|
+
break;
|
|
28
|
+
case ITerminalProvider_1.TerminalProviderSeverity.warning:
|
|
29
|
+
this._writeMethod = terminal.writeWarning.bind(terminal);
|
|
30
|
+
break;
|
|
31
|
+
case ITerminalProvider_1.TerminalProviderSeverity.error:
|
|
32
|
+
this._writeMethod = terminal.writeError.bind(terminal);
|
|
33
|
+
break;
|
|
34
|
+
default:
|
|
35
|
+
throw new Error(`Unknown severity: ${severity}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
_write(chunk, encoding,
|
|
39
|
+
// eslint-disable-next-line @rushstack/no-new-null
|
|
40
|
+
callback) {
|
|
41
|
+
try {
|
|
42
|
+
const chunkData = typeof chunk === 'string' ? chunk : Buffer.from(chunk);
|
|
43
|
+
this._writeMethod(chunkData.toString());
|
|
44
|
+
}
|
|
45
|
+
catch (e) {
|
|
46
|
+
callback(e);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
callback();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.TerminalStreamWritable = TerminalStreamWritable;
|
|
53
|
+
//# sourceMappingURL=TerminalStreamWritable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerminalStreamWritable.js","sourceRoot":"","sources":["../src/TerminalStreamWritable.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAE3D,mCAAwD;AAExD,2DAA+D;AAsB/D;;;;GAIG;AACH,MAAa,sBAAuB,SAAQ,iBAAQ;IAGlD,YAAmB,OAAuC;QACxD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;QACxD,KAAK,CAAC,eAAe,CAAC,CAAC;QAEvB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;QACzB,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,4CAAwB,CAAC,GAAG;gBAC/B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM;YACR,KAAK,4CAAwB,CAAC,OAAO;gBACnC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,4CAAwB,CAAC,KAAK;gBACjC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM;YACR,KAAK,4CAAwB,CAAC,OAAO;gBACnC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzD,MAAM;YACR,KAAK,4CAAwB,CAAC,KAAK;gBACjC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvD,MAAM;YACR;gBACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,QAAQ,EAAE,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAEM,MAAM,CACX,KAAmC,EACnC,QAAgB;IAChB,kDAAkD;IAClD,QAAwC;QAExC,IAAI,CAAC;YACH,MAAM,SAAS,GAAoB,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1F,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,CAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,CAAU,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QACD,QAAQ,EAAE,CAAC;IACb,CAAC;CACF;AA5CD,wDA4CC","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 { Writable, type WritableOptions } from 'stream';\nimport type { ITerminal } from './ITerminal';\nimport { TerminalProviderSeverity } from './ITerminalProvider';\n\n/**\n * Options for {@link TerminalStreamWritable}.\n *\n * @beta\n */\nexport interface ITerminalStreamWritableOptions {\n /**\n * The {@link ITerminal} that the Writable will write to.\n */\n terminal: ITerminal;\n /**\n * The severity of the messages that will be written to the {@link ITerminal}.\n */\n severity: TerminalProviderSeverity;\n /**\n * Options for the underlying Writable.\n */\n writableOptions?: WritableOptions;\n}\n\n/**\n * A adapter to allow writing to a provided terminal using Writable streams.\n *\n * @beta\n */\nexport class TerminalStreamWritable extends Writable {\n private _writeMethod: (data: string) => void;\n\n public constructor(options: ITerminalStreamWritableOptions) {\n const { terminal, severity, writableOptions } = options;\n super(writableOptions);\n\n this._writev = undefined;\n switch (severity) {\n case TerminalProviderSeverity.log:\n this._writeMethod = terminal.write.bind(terminal);\n break;\n case TerminalProviderSeverity.verbose:\n this._writeMethod = terminal.writeVerbose.bind(terminal);\n break;\n case TerminalProviderSeverity.debug:\n this._writeMethod = terminal.writeDebug.bind(terminal);\n break;\n case TerminalProviderSeverity.warning:\n this._writeMethod = terminal.writeWarning.bind(terminal);\n break;\n case TerminalProviderSeverity.error:\n this._writeMethod = terminal.writeError.bind(terminal);\n break;\n default:\n throw new Error(`Unknown severity: ${severity}`);\n }\n }\n\n public _write(\n chunk: string | Buffer | Uint8Array,\n encoding: string,\n // eslint-disable-next-line @rushstack/no-new-null\n callback: (error?: Error | null) => void\n ): void {\n try {\n const chunkData: string | Buffer = typeof chunk === 'string' ? chunk : Buffer.from(chunk);\n this._writeMethod(chunkData.toString());\n } catch (e: unknown) {\n callback(e as Error);\n return;\n }\n callback();\n }\n}\n"]}
|
|
@@ -21,7 +21,7 @@ export interface ITerminalWritableOptions {
|
|
|
21
21
|
/**
|
|
22
22
|
* The abstract base class for objects that can present, route, or process text output for
|
|
23
23
|
* a console application. This output is typically prepared using
|
|
24
|
-
* the {@link
|
|
24
|
+
* the {@link Terminal} API.
|
|
25
25
|
*
|
|
26
26
|
* @remarks
|
|
27
27
|
*
|
package/lib/TerminalWritable.js
CHANGED
|
@@ -6,7 +6,7 @@ exports.TerminalWritable = void 0;
|
|
|
6
6
|
/**
|
|
7
7
|
* The abstract base class for objects that can present, route, or process text output for
|
|
8
8
|
* a console application. This output is typically prepared using
|
|
9
|
-
* the {@link
|
|
9
|
+
* the {@link Terminal} API.
|
|
10
10
|
*
|
|
11
11
|
* @remarks
|
|
12
12
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TerminalWritable.js","sourceRoot":"","sources":["../src/TerminalWritable.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAwB3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAsB,gBAAgB;IAKpC,YAAmB,OAAkC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,UAAU,CAAC,KAAqB;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAOD;;;;;;;;;;;;OAYG;IACI,KAAK;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACO,OAAO,KAAU,CAAC;CAC7B;AAhFD,4CAgFC","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 { ITerminalChunk } from './ITerminalChunk';\n\n/**\n * Constructor options for {@link TerminalWritable}\n *\n * @public\n */\nexport interface ITerminalWritableOptions {\n /**\n * When this object is the {@link TerminalTransform.destination} for a transform,\n * the transform will automatically close this object. Set `preventAutoclose` to `true`\n * to prevent that behavior.\n *\n * @remarks\n * When a transform is closed, normally it will automatically close its destination\n * `TerminalWritable` object. There are two ways to prevent that: either by setting\n * `preventDestinationAutoclose` to `true` for the transform, or by setting\n * {@link TerminalWritable.preventAutoclose} to `true` for the `destination` object.\n */\n preventAutoclose?: boolean;\n}\n\n/**\n * The abstract base class for objects that can present, route, or process text output for\n * a console application. This output is typically prepared using\n * the {@link
|
|
1
|
+
{"version":3,"file":"TerminalWritable.js","sourceRoot":"","sources":["../src/TerminalWritable.ts"],"names":[],"mappings":";AAAA,4FAA4F;AAC5F,2DAA2D;;;AAwB3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,MAAsB,gBAAgB;IAKpC,YAAmB,OAAkC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,EAAE,CAAC;QACf,CAAC;QAED,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,UAAU,CAAC,KAAqB;QACrC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;QAC/C,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAOD;;;;;;;;;;;;OAYG;IACI,KAAK;QACV,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;;;;;;;;OASG;IACO,OAAO,KAAU,CAAC;CAC7B;AAhFD,4CAgFC","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 { ITerminalChunk } from './ITerminalChunk';\n\n/**\n * Constructor options for {@link TerminalWritable}\n *\n * @public\n */\nexport interface ITerminalWritableOptions {\n /**\n * When this object is the {@link TerminalTransform.destination} for a transform,\n * the transform will automatically close this object. Set `preventAutoclose` to `true`\n * to prevent that behavior.\n *\n * @remarks\n * When a transform is closed, normally it will automatically close its destination\n * `TerminalWritable` object. There are two ways to prevent that: either by setting\n * `preventDestinationAutoclose` to `true` for the transform, or by setting\n * {@link TerminalWritable.preventAutoclose} to `true` for the `destination` object.\n */\n preventAutoclose?: boolean;\n}\n\n/**\n * The abstract base class for objects that can present, route, or process text output for\n * a console application. This output is typically prepared using\n * the {@link Terminal} API.\n *\n * @remarks\n *\n * The design is based loosely on the `WritableStream` and `TransformStream` classes from\n * the system {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Concepts\n * | Streams API}, except that instead of asynchronous byte streams, the `TerminalWritable`\n * system synchronously transmits human readable messages intended to be rendered on a text\n * console or log file.\n *\n * Consider a console application whose output may need to be processed in different ways\n * before finally being output. The conceptual block diagram might look like this:\n *\n * ```\n * [Terminal API]\n * |\n * V\n * [normalize newlines]\n * |\n * V\n * +----[splitter]-------+\n * | |\n * V V\n * [shell console] [remove ANSI colors]\n * |\n * V\n * [write to build.log]\n * ```\n *\n * The application uses the `Terminal` API to print `stdout` and `stderr` messages, for example with standardized\n * formatting for errors and warnings, and ANSI escapes to make nice colors. Maybe it also includes text\n * received from external processes, whose newlines may be inconsistent. Ultimately we want to write the\n * output to the shell console and a `build.log` file, but we don't want to put ANSI colors in the build log.\n *\n * For the above example, `[shell console]` and `[write to build.log]` would be modeled as subclasses of\n * `TerminalWritable`. The `[normalize newlines]` and `[remove ANSI colors]` steps are modeled as subclasses\n * of {@link TerminalTransform}, because they output to a \"destination\" object. The `[splitter]` would be\n * implemented using {@link SplitterTransform}.\n *\n * The stream of messages are {@link ITerminalChunk} objects, which can represent both `stdout` and `stderr`\n * channels. The pipeline operates synchronously on each chunk, but by processing one chunk at a time,\n * it avoids storing the entire output in memory. This means that operations like `[remove ANSI colors]`\n * cannot be simple regular expressions -- they must be implemented as state machines ({@link TextRewriter}\n * subclasses) capable of matching substrings that span multiple chunks.\n *\n * @public\n */\nexport abstract class TerminalWritable {\n private _isOpen: boolean;\n\n public readonly preventAutoclose: boolean;\n\n public constructor(options?: ITerminalWritableOptions) {\n this._isOpen = true;\n\n if (!options) {\n options = {};\n }\n\n this.preventAutoclose = !!options.preventAutoclose;\n }\n\n /**\n * This property is initially `true` when the object is constructed, and becomes `false`\n * when `close()` is called.\n * @sealed\n */\n public get isOpen(): boolean {\n return this._isOpen;\n }\n\n /**\n * Upstream objects call this method to provide inputs to this object.\n *\n * @remarks\n * The subclass provides its implementation via the the {@link TerminalWritable.onWriteChunk}\n * method, which is called by `writeChunk()`.\n *\n * The object that calls `writeChunk()` must call `close()` when it is finished;\n * failing to do so may introduce a resource leak, or may prevent some buffered data from\n * being written.\n *\n * @sealed\n */\n public writeChunk(chunk: ITerminalChunk): void {\n if (!this._isOpen) {\n throw new Error('Writer was already closed');\n }\n this.onWriteChunk(chunk);\n }\n\n /**\n * Subclasses should implement this `abstract` method to process the chunk.\n */\n protected abstract onWriteChunk(chunk: ITerminalChunk): void;\n\n /**\n * Calling this method flushes any remaining outputs and permanently transitions the\n * `TerminalWritable` to a \"closed\" state, where no further chunks can be written.\n *\n * @remarks\n * The subclass provides its implementation via the the {@link TerminalWritable.onClose}\n * method, which is called by `close()`.\n *\n * If this method is called more than once, the additional calls are ignored;\n * `TerminalWritable.onClose` will be called at most once.\n *\n * @sealed\n */\n public close(): void {\n if (this._isOpen) {\n this.onClose();\n this._isOpen = false;\n }\n }\n\n /**\n * Subclasses can override this empty method to perform additional operations\n * such as closing a file handle.\n *\n * @remarks\n * It is guaranteed that this method will be called at most once during the lifetime\n * of a `TerminalWritable` object.\n *\n * @virtual\n */\n protected onClose(): void {}\n}\n"]}
|