1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const common_tags_1 = require("common-tags");
|
4 | const cli_ansi_1 = require("../cli/cli-ansi");
|
5 | const enums_1 = require("../enums");
|
6 | const Ansi = new cli_ansi_1.CliAnsi();
|
7 | class ConsoleLine {
|
8 | constructor(message) {
|
9 | this.color = enums_1.ConsoleColor.FgWhite;
|
10 | this.textPrefix = '';
|
11 | this.textSuffix = '';
|
12 | this.message = '';
|
13 | this.type = enums_1.ConsoleLineType.Comment;
|
14 | this.timestamp = new Date();
|
15 | this.message = message;
|
16 | }
|
17 | toString() {
|
18 | return `${this.textPrefix} ${this.message} ${this.textSuffix}`;
|
19 | }
|
20 | getClassName() {
|
21 | return enums_1.ConsoleLineType[this.type];
|
22 | }
|
23 | toConsoleString() {
|
24 | return this.color + this.toString() + enums_1.ConsoleColor.Reset;
|
25 | }
|
26 | }
|
27 | exports.ConsoleLine = ConsoleLine;
|
28 | ConsoleLine.targetLineLength = 72;
|
29 | class HeadingLine extends ConsoleLine {
|
30 | constructor(message) {
|
31 | super(message);
|
32 | this.color = enums_1.ConsoleColor.FgBrightYellow;
|
33 | this.type = enums_1.ConsoleLineType.Heading;
|
34 | }
|
35 | toString() {
|
36 | let text = super.toString().trim();
|
37 | let padLength = Math.ceil((ConsoleLine.targetLineLength - text.length) / 2);
|
38 | return common_tags_1.oneLine `
|
39 | ${this.color}${'='.repeat(padLength)}
|
40 | ${text}
|
41 | ${'='.repeat(padLength)}
|
42 | ${enums_1.ConsoleColor.Reset}
|
43 | `;
|
44 | }
|
45 | }
|
46 | exports.HeadingLine = HeadingLine;
|
47 | class SubheadingLine extends ConsoleLine {
|
48 | constructor(message) {
|
49 | super(message);
|
50 | this.color = enums_1.ConsoleColor.FgYellow;
|
51 | this.type = enums_1.ConsoleLineType.Subheading;
|
52 | }
|
53 | toString() {
|
54 | let text = super.toString().trim();
|
55 | return ` ${Ansi.fgYellow(Ansi.underlined(text))} \n`;
|
56 | }
|
57 | }
|
58 | exports.SubheadingLine = SubheadingLine;
|
59 | class SectionHeadingLine extends ConsoleLine {
|
60 | constructor(message) {
|
61 | super(message);
|
62 | this.color = enums_1.ConsoleColor.FgBrightWhite;
|
63 | this.type = enums_1.ConsoleLineType.Subheading;
|
64 | }
|
65 | toString() {
|
66 | let text = super.toString().trim();
|
67 | return ` ${Ansi.fgWhite(Ansi.bold(text))}`;
|
68 | }
|
69 | }
|
70 | exports.SectionHeadingLine = SectionHeadingLine;
|
71 | class CustomLine extends ConsoleLine {
|
72 | constructor(message, color) {
|
73 | super(message);
|
74 | this.color = color;
|
75 | this.type = enums_1.ConsoleLineType.Comment;
|
76 | }
|
77 | }
|
78 | exports.CustomLine = CustomLine;
|
79 | class LineBreak extends ConsoleLine {
|
80 | constructor() {
|
81 | super(' ');
|
82 | this.type = enums_1.ConsoleLineType.Decoration;
|
83 | }
|
84 | }
|
85 | exports.LineBreak = LineBreak;
|
86 | class CommentLine extends ConsoleLine {
|
87 | constructor(message) {
|
88 | super(message);
|
89 | this.textPrefix = '»';
|
90 | this.color = enums_1.ConsoleColor.FgCyan;
|
91 | this.type = enums_1.ConsoleLineType.Comment;
|
92 | }
|
93 | toConsoleString() {
|
94 | return common_tags_1.oneLine `
|
95 | ${enums_1.ConsoleColor.Reset}
|
96 | ${Ansi.bgRgb(Ansi.fgBlack(' ' + this.textPrefix + ' '), 150, 150, 150)}
|
97 | ${Ansi.fgRgb(this.message, 120, 120, 120)}
|
98 | ${enums_1.ConsoleColor.Reset}
|
99 | `;
|
100 | }
|
101 | }
|
102 | exports.CommentLine = CommentLine;
|
103 | class PassLine extends ConsoleLine {
|
104 | constructor(message) {
|
105 | super(message);
|
106 | this.textPrefix = '✔';
|
107 | this.color = enums_1.ConsoleColor.FgGreen;
|
108 | this.type = enums_1.ConsoleLineType.Pass;
|
109 | }
|
110 | toConsoleString() {
|
111 | return common_tags_1.oneLine `
|
112 | ${enums_1.ConsoleColor.Reset}
|
113 | ${Ansi.bgGreen(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
114 | ${this.message}
|
115 | ${enums_1.ConsoleColor.Reset}
|
116 | `;
|
117 | }
|
118 | }
|
119 | exports.PassLine = PassLine;
|
120 | class ActionCompletedLine extends PassLine {
|
121 | constructor(verb, noun) {
|
122 | super(`${verb} ${noun}`);
|
123 | this._verb = verb;
|
124 | this._noun = noun;
|
125 | }
|
126 | toConsoleString() {
|
127 | return common_tags_1.oneLine `
|
128 | ${enums_1.ConsoleColor.Reset}
|
129 | ${Ansi.bgGreen(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
130 | ${Ansi.bgRgb(` ${this._verb} `, 65, 65, 65)}
|
131 | ${Ansi.fgRgb(this._noun, 120, 120, 120)}
|
132 | ${enums_1.ConsoleColor.Reset}
|
133 | `;
|
134 | }
|
135 | }
|
136 | exports.ActionCompletedLine = ActionCompletedLine;
|
137 | class FailLine extends ConsoleLine {
|
138 | constructor(message) {
|
139 | super(message);
|
140 | this.textPrefix = '✕';
|
141 | this.color = enums_1.ConsoleColor.FgRed;
|
142 | this.type = enums_1.ConsoleLineType.Fail;
|
143 | }
|
144 | toConsoleString() {
|
145 | return common_tags_1.oneLine `
|
146 | ${enums_1.ConsoleColor.Reset}
|
147 | ${Ansi.bgRed(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
148 | ${this.message}
|
149 | ${enums_1.ConsoleColor.Reset}
|
150 | `;
|
151 | }
|
152 | }
|
153 | exports.FailLine = FailLine;
|
154 | class ActionFailedLine extends FailLine {
|
155 | constructor(verb, noun) {
|
156 | super(`${verb} ${noun}`);
|
157 | this._verb = verb;
|
158 | this._noun = noun;
|
159 | }
|
160 | toConsoleString() {
|
161 | return common_tags_1.oneLine `
|
162 | ${enums_1.ConsoleColor.Reset}
|
163 | ${Ansi.bgRed(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
164 | ${Ansi.bgRgb(` ${this._verb} `, 65, 65, 65)}
|
165 | ${Ansi.fgRgb(this._noun, 120, 120, 120)}
|
166 | ${enums_1.ConsoleColor.Reset}
|
167 | `;
|
168 | }
|
169 | }
|
170 | exports.ActionFailedLine = ActionFailedLine;
|
171 | class OptionalFailLine extends ConsoleLine {
|
172 | constructor(message) {
|
173 | super(message);
|
174 | this.textPrefix = '✕';
|
175 | this.color = enums_1.ConsoleColor.FgMagenta;
|
176 | this.type = enums_1.ConsoleLineType.Comment;
|
177 | this.textSuffix = '[Optional]';
|
178 | }
|
179 | toConsoleString() {
|
180 | return common_tags_1.oneLine `
|
181 | ${enums_1.ConsoleColor.Reset}
|
182 | ${Ansi.bgMagenta(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
183 | ${this.message} [Optional]
|
184 | ${enums_1.ConsoleColor.Reset}
|
185 | `;
|
186 | }
|
187 | }
|
188 | exports.OptionalFailLine = OptionalFailLine;
|
189 | class WarningLine extends ConsoleLine {
|
190 | constructor(message) {
|
191 | super(message);
|
192 | this.textPrefix = '!';
|
193 | this.color = enums_1.ConsoleColor.FgMagenta;
|
194 | this.type = enums_1.ConsoleLineType.Comment;
|
195 | }
|
196 | toConsoleString() {
|
197 | return common_tags_1.oneLine `
|
198 | ${enums_1.ConsoleColor.Reset}
|
199 | ${Ansi.bgMagenta(Ansi.fgWhite(' ' + this.textPrefix + ' '))}
|
200 | ${this.message}
|
201 | ${enums_1.ConsoleColor.Reset}
|
202 | `;
|
203 | }
|
204 | }
|
205 | exports.WarningLine = WarningLine;
|
206 | class DetailLine extends ConsoleLine {
|
207 | constructor(message) {
|
208 | super(message);
|
209 | this.textPrefix = '…';
|
210 | this.color = enums_1.ConsoleColor.FgYellow;
|
211 | this.type = enums_1.ConsoleLineType.Comment;
|
212 | }
|
213 | toConsoleString() {
|
214 | return common_tags_1.oneLine `
|
215 | ${enums_1.ConsoleColor.Reset}
|
216 | ${Ansi.bgWhite(Ansi.fgBlack(' ' + this.textPrefix + ' '))}
|
217 | ${this.message}
|
218 | ${enums_1.ConsoleColor.Reset}
|
219 | `;
|
220 | }
|
221 | }
|
222 | exports.DetailLine = DetailLine;
|
223 | class SourceCodeBlock extends ConsoleLine {
|
224 | constructor(message, highlight) {
|
225 | super(message);
|
226 | this.textPrefix = ' ';
|
227 | this.highlight = null;
|
228 | this.color = enums_1.ConsoleColor.FgWhite;
|
229 | this.type = enums_1.ConsoleLineType.Comment;
|
230 | this.highlight = highlight || null;
|
231 | }
|
232 | toConsoleString() {
|
233 | const lines = this._codeHighlight(this.message)
|
234 | .split("\n");
|
235 | let out = `${this.color}\n`;
|
236 | lines.forEach((line) => {
|
237 | out += `${this.textPrefix}${line}\n`;
|
238 | });
|
239 | out += `${enums_1.ConsoleColor.Reset}\n`;
|
240 | return out;
|
241 | }
|
242 | _codeHighlight(source) {
|
243 | if (this.highlight !== null) {
|
244 | const regex = new RegExp(`(${this.highlight})`, 'ig');
|
245 | source = source.replace(regex, `${enums_1.ConsoleColor.Highlight}$1${enums_1.ConsoleColor.Unhighlight}`);
|
246 | }
|
247 | source = source
|
248 | .replace(/ ([a-z-]+)=/ig, ` ${enums_1.ConsoleColor.FgMagenta}$1${this.color}=`)
|
249 | .replace(/="([^"]+)"/ig, `="${enums_1.ConsoleColor.FgGreen}$1${this.color}"`)
|
250 | .replace(/='([^']+)"/ig, `='${enums_1.ConsoleColor.FgGreen}$1${this.color}'`)
|
251 | .replace(/<([a-z-]+) /ig, `<${enums_1.ConsoleColor.FgYellow}$1${this.color} `)
|
252 | .replace(/<(\/[a-z-]+)>/ig, `<${enums_1.ConsoleColor.FgYellow}$1${this.color}>`);
|
253 | return source;
|
254 | }
|
255 | }
|
256 | exports.SourceCodeBlock = SourceCodeBlock;
|
257 |
|
\ | No newline at end of file |