go-dev 0.3.2 → 0.4.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "go-dev",
3
- "version": "0.3.2",
3
+ "version": "0.4.1",
4
4
  "main": "src/index.js",
5
5
  "bin": {
6
6
  "go-dev": "bin/go-dev"
package/src/config.js CHANGED
@@ -1,7 +1,6 @@
1
1
  const Joi = require('joi');
2
2
  const yaml = require('js-yaml');
3
3
  const fs = require('fs');
4
- const path = require('path');
5
4
 
6
5
  const dependencyEntrySchema = Joi.alternatives().try(
7
6
  Joi.string(),
@@ -0,0 +1,20 @@
1
+ const detectLastFormatting = require("./terminal-formatting/detect-last-formatting");
2
+
3
+ function prefixLines(text, prefix, latestFormatting) {
4
+ let prefixedText = text.split('\n').map(line => {
5
+ latestFormatting = detectLastFormatting(line, latestFormatting);
6
+ return `${prefix} ${latestFormatting}${line}${latestFormatting !== '' ? '\x1b[0m' : ''}`;
7
+ }).join('\n');
8
+
9
+ if (prefixedText.endsWith(`${prefix} `)) {
10
+ prefixedText = prefixedText.slice(0, -(`${prefix} `).length);
11
+ }
12
+ if (!prefixedText.endsWith('\n')) {
13
+ prefixedText = prefixedText + '\n';
14
+ }
15
+ prefixedText = prefixedText.replace(/\x1b\[(?:2J|3J|H)|\x1bc|\x1b\[2K|\x1b\[K/gi, '');
16
+
17
+ return { prefixedText, lastFormatting: latestFormatting };
18
+ }
19
+
20
+ module.exports = prefixLines;
@@ -1,6 +1,5 @@
1
1
  const { spawn, spawnSync } = require('child_process');
2
- const { appendFileSync } = require('fs');
3
-
2
+ const prefixLines = require("./prefix-lines");
4
3
 
5
4
  class ProcessManager {
6
5
  constructor() {
@@ -120,27 +119,18 @@ class ProcessManager {
120
119
  });
121
120
  processReference.process = startedProcess;
122
121
 
122
+ let lastFormatting = '';
123
123
  startedProcess.stdout.on('data', (data) => {
124
- let prefixedData = data.toString().split('\n').map(line => `${prefix} ${line}`).join('\n');
125
- if (prefixedData.endsWith(`${prefix} `)) {
126
- prefixedData = prefixedData.slice(0, -(`${prefix} `).length);
127
- }
128
- if (!prefixedData.endsWith('\n')) {
129
- prefixedData = prefixedData + '\n';
130
- }
131
- prefixedData = prefixedData.replace(/\x1b\[(?:2J|3J|H)/gi, '');
132
- process.stdout.write(prefixedData);
124
+ const result = prefixLines(data.toString(), prefix, lastFormatting);
125
+ lastFormatting = result.lastFormatting;
126
+ // process.stdout.write(JSON.stringify(data.toString()) + "\n");
127
+ process.stdout.write(result.prefixedText);
133
128
  });
134
129
  startedProcess.stderr.on('data', (data) => {
135
- let prefixedData = data.toString().split('\n').map(line => `${prefix} ${line}`).join('\n');
136
- if (prefixedData.endsWith(`${prefix} `)) {
137
- prefixedData = prefixedData.slice(0, -(`${prefix} `).length);
138
- }
139
- if (!prefixedData.endsWith('\n')) {
140
- prefixedData = prefixedData + '\n';
141
- }
142
- prefixedData = prefixedData.replace(/\x1b\[(?:2J|H)/gi, '');
143
- process.stderr.write(prefixedData);
130
+ const result = prefixLines(data.toString(), prefix, lastFormatting);
131
+ lastFormatting = result.lastFormatting;
132
+ // process.stderr.write(JSON.stringify(data.toString()) + "\n");
133
+ process.stderr.write(result.prefixedText);
144
134
  });
145
135
 
146
136
  this.managedProcesses.add(startedProcess);
@@ -0,0 +1,223 @@
1
+ const {
2
+ RESET_ALL,
3
+ RESET_FOREGROUND,
4
+ RESET_BACKGROUND,
5
+
6
+ SET_BOLD,
7
+ SET_DIM,
8
+ SET_ITALIC,
9
+ SET_UNDERLINE,
10
+ SET_SLOW_BLINK,
11
+ SET_RAPID_BLINK,
12
+ SET_REVERSE,
13
+ SET_HIDE,
14
+ SET_STRIKETHROUGH,
15
+ SET_DOUBLE_UNDERLINE,
16
+
17
+ RESET_BOLD_DIM,
18
+ RESET_ITALIC,
19
+ RESET_UNDERLINE,
20
+ RESET_BLINK,
21
+ RESET_REVERSE,
22
+ RESET_HIDE,
23
+ RESET_STRIKETHROUGH,
24
+
25
+ SET_FG_BLACK,
26
+ SET_FG_RED,
27
+ SET_FG_GREEN,
28
+ SET_FG_YELLOW,
29
+ SET_FG_BLUE,
30
+ SET_FG_MAGENTA,
31
+ SET_FG_CYAN,
32
+ SET_FG_WHITE,
33
+
34
+ SET_BG_BLACK,
35
+ SET_BG_RED,
36
+ SET_BG_GREEN,
37
+ SET_BG_YELLOW,
38
+ SET_BG_BLUE,
39
+ SET_BG_MAGENTA,
40
+ SET_BG_CYAN,
41
+ SET_BG_WHITE,
42
+
43
+ SET_FG_BRIGHT_BLACK,
44
+ SET_FG_BRIGHT_RED,
45
+ SET_FG_BRIGHT_GREEN,
46
+ SET_FG_BRIGHT_YELLOW,
47
+ SET_FG_BRIGHT_BLUE,
48
+ SET_FG_BRIGHT_MAGENTA,
49
+ SET_FG_BRIGHT_CYAN,
50
+ SET_FG_BRIGHT_WHITE,
51
+
52
+ SET_BG_BRIGHT_BLACK,
53
+ SET_BG_BRIGHT_RED,
54
+ SET_BG_BRIGHT_GREEN,
55
+ SET_BG_BRIGHT_YELLOW,
56
+ SET_BG_BRIGHT_BLUE,
57
+ SET_BG_BRIGHT_MAGENTA,
58
+ SET_BG_BRIGHT_CYAN,
59
+ SET_BG_BRIGHT_WHITE,
60
+
61
+ SET_FG_COLOR,
62
+ SET_BG_COLOR,
63
+
64
+ COLOR_MODE_256,
65
+ COLOR_MODE_RGB,
66
+
67
+ FOREGROUND_INDEX,
68
+ BACKGROUND_INDEX,
69
+ BOLD_DIM_INDEX,
70
+ ITALIC_INDEX,
71
+ UNDERLINE_INDEX,
72
+ BLINK_INDEX,
73
+ REVERSE_INDEX,
74
+ HIDE_INDEX,
75
+ STRIKETHROUGH_INDEX,
76
+ } = require("./constants");
77
+
78
+ function applyFormattingCodes(currentCodes, codes) {
79
+ for (let i = 0; i < codes.length; i++) {
80
+ const code = codes[i];
81
+ switch (code) {
82
+ case RESET_ALL: {
83
+ currentCodes.splice(0);
84
+ break;
85
+ }
86
+ case RESET_FOREGROUND: {
87
+ currentCodes[FOREGROUND_INDEX] = undefined;
88
+ break;
89
+ }
90
+ case RESET_BACKGROUND: {
91
+ currentCodes[BACKGROUND_INDEX] = undefined;
92
+ break;
93
+ }
94
+ case RESET_BOLD_DIM: {
95
+ currentCodes[BOLD_DIM_INDEX] = undefined;
96
+ break;
97
+ }
98
+ case RESET_ITALIC: {
99
+ currentCodes[ITALIC_INDEX] = undefined;
100
+ break;
101
+ }
102
+ case RESET_UNDERLINE: {
103
+ currentCodes[UNDERLINE_INDEX] = undefined;
104
+ break;
105
+ }
106
+ case RESET_BLINK: {
107
+ currentCodes[BLINK_INDEX] = undefined;
108
+ break;
109
+ }
110
+ case RESET_REVERSE: {
111
+ currentCodes[REVERSE_INDEX] = undefined;
112
+ break;
113
+ }
114
+ case RESET_HIDE: {
115
+ currentCodes[HIDE_INDEX] = undefined;
116
+ break;
117
+ }
118
+ case RESET_STRIKETHROUGH: {
119
+ currentCodes[STRIKETHROUGH_INDEX] = undefined;
120
+ break;
121
+ }
122
+ case SET_FG_BLACK:
123
+ case SET_FG_RED:
124
+ case SET_FG_GREEN:
125
+ case SET_FG_YELLOW:
126
+ case SET_FG_BLUE:
127
+ case SET_FG_MAGENTA:
128
+ case SET_FG_CYAN:
129
+ case SET_FG_WHITE:
130
+ case SET_FG_BRIGHT_BLACK:
131
+ case SET_FG_BRIGHT_RED:
132
+ case SET_FG_BRIGHT_GREEN:
133
+ case SET_FG_BRIGHT_YELLOW:
134
+ case SET_FG_BRIGHT_BLUE:
135
+ case SET_FG_BRIGHT_MAGENTA:
136
+ case SET_FG_BRIGHT_CYAN:
137
+ case SET_FG_BRIGHT_WHITE:
138
+ case SET_FG_COLOR: {
139
+ if (code === SET_FG_COLOR) {
140
+ const nextCode = codes[i + 1];
141
+ let finalCode = `${code};${nextCode}`;
142
+ if (nextCode === COLOR_MODE_256) {
143
+ finalCode = `${finalCode};${codes[i + 2]}`;
144
+ i += 2;
145
+ } else {
146
+ finalCode = `${finalCode};${codes[i + 2]};${codes[i + 3]};${codes[i + 4]}`;
147
+ i += 4;
148
+ }
149
+ currentCodes[FOREGROUND_INDEX] = finalCode;
150
+ } else {
151
+ currentCodes[FOREGROUND_INDEX] = code;
152
+ }
153
+ break;
154
+ }
155
+ case SET_BG_BLACK:
156
+ case SET_BG_RED:
157
+ case SET_BG_GREEN:
158
+ case SET_BG_YELLOW:
159
+ case SET_BG_BLUE:
160
+ case SET_BG_MAGENTA:
161
+ case SET_BG_CYAN:
162
+ case SET_BG_WHITE:
163
+ case SET_BG_BRIGHT_BLACK:
164
+ case SET_BG_BRIGHT_RED:
165
+ case SET_BG_BRIGHT_GREEN:
166
+ case SET_BG_BRIGHT_YELLOW:
167
+ case SET_BG_BRIGHT_BLUE:
168
+ case SET_BG_BRIGHT_MAGENTA:
169
+ case SET_BG_BRIGHT_CYAN:
170
+ case SET_BG_BRIGHT_WHITE:
171
+ case SET_BG_COLOR: {
172
+ if (code === SET_BG_COLOR) {
173
+ const nextCode = codes[i + 1];
174
+ let finalCode = `${code};${nextCode}`;
175
+ if (nextCode === COLOR_MODE_256) {
176
+ finalCode = `${finalCode};${codes[i + 2]}`;
177
+ i += 2;
178
+ } else {
179
+ finalCode = `${finalCode};${codes[i + 2]};${codes[i + 3]};${codes[i + 4]}`;
180
+ i += 4;
181
+ }
182
+ currentCodes[BACKGROUND_INDEX] = finalCode;
183
+ } else {
184
+ currentCodes[BACKGROUND_INDEX] = code;
185
+ }
186
+ break;
187
+ }
188
+ case SET_BOLD:
189
+ case SET_DIM: {
190
+ currentCodes[BOLD_DIM_INDEX] = code;
191
+ break;
192
+ }
193
+ case SET_ITALIC: {
194
+ currentCodes[ITALIC_INDEX] = code;
195
+ break;
196
+ }
197
+ case SET_UNDERLINE:
198
+ case SET_DOUBLE_UNDERLINE: {
199
+ currentCodes[UNDERLINE_INDEX] = code;
200
+ break;
201
+ }
202
+ case SET_SLOW_BLINK:
203
+ case SET_RAPID_BLINK: {
204
+ currentCodes[BLINK_INDEX] = code;
205
+ break;
206
+ }
207
+ case SET_REVERSE: {
208
+ currentCodes[REVERSE_INDEX] = code;
209
+ break;
210
+ }
211
+ case SET_HIDE: {
212
+ currentCodes[HIDE_INDEX] = code;
213
+ break;
214
+ }
215
+ case SET_STRIKETHROUGH: {
216
+ currentCodes[STRIKETHROUGH_INDEX] = code;
217
+ break;
218
+ }
219
+ }
220
+ }
221
+ }
222
+
223
+ module.exports = applyFormattingCodes;
@@ -0,0 +1,151 @@
1
+ const RESET_ALL = "0";
2
+ const RESET_FOREGROUND = "39";
3
+ const RESET_BACKGROUND = "49";
4
+
5
+ const SET_BOLD = "1";
6
+ const SET_DIM = "2";
7
+ const SET_ITALIC = "3";
8
+ const SET_UNDERLINE = "4";
9
+ const SET_SLOW_BLINK = "5";
10
+ const SET_RAPID_BLINK = "6";
11
+ const SET_REVERSE = "7";
12
+ const SET_HIDE = "8";
13
+ const SET_STRIKETHROUGH = "9";
14
+ const SET_DOUBLE_UNDERLINE = "21";
15
+
16
+ const RESET_BOLD_DIM = "22";
17
+ const RESET_ITALIC = "23";
18
+ const RESET_UNDERLINE = "24";
19
+ const RESET_BLINK = "25";
20
+ const RESET_REVERSE = "27";
21
+ const RESET_HIDE = "28";
22
+ const RESET_STRIKETHROUGH = "29";
23
+
24
+ const SET_FG_BLACK = "30";
25
+ const SET_FG_RED = "31";
26
+ const SET_FG_GREEN = "32";
27
+ const SET_FG_YELLOW = "33";
28
+ const SET_FG_BLUE = "34";
29
+ const SET_FG_MAGENTA = "35";
30
+ const SET_FG_CYAN = "36";
31
+ const SET_FG_WHITE = "37";
32
+
33
+ const SET_BG_BLACK = "40";
34
+ const SET_BG_RED = "41";
35
+ const SET_BG_GREEN = "42";
36
+ const SET_BG_YELLOW = "43";
37
+ const SET_BG_BLUE = "44";
38
+ const SET_BG_MAGENTA = "45";
39
+ const SET_BG_CYAN = "46";
40
+ const SET_BG_WHITE = "47";
41
+
42
+ const SET_FG_BRIGHT_BLACK = "90";
43
+ const SET_FG_BRIGHT_RED = "91";
44
+ const SET_FG_BRIGHT_GREEN = "92";
45
+ const SET_FG_BRIGHT_YELLOW = "93";
46
+ const SET_FG_BRIGHT_BLUE = "94";
47
+ const SET_FG_BRIGHT_MAGENTA = "95";
48
+ const SET_FG_BRIGHT_CYAN = "96";
49
+ const SET_FG_BRIGHT_WHITE = "97";
50
+
51
+ const SET_BG_BRIGHT_BLACK = "100";
52
+ const SET_BG_BRIGHT_RED = "101";
53
+ const SET_BG_BRIGHT_GREEN = "102";
54
+ const SET_BG_BRIGHT_YELLOW = "103";
55
+ const SET_BG_BRIGHT_BLUE = "104";
56
+ const SET_BG_BRIGHT_MAGENTA = "105";
57
+ const SET_BG_BRIGHT_CYAN = "106";
58
+ const SET_BG_BRIGHT_WHITE = "107";
59
+
60
+ const SET_FG_COLOR = "38";
61
+ const SET_BG_COLOR = "48";
62
+
63
+ const COLOR_MODE_256 = "5";
64
+ const COLOR_MODE_RGB = "2";
65
+
66
+ const FOREGROUND_INDEX = 0;
67
+ const BACKGROUND_INDEX = 1;
68
+ const BOLD_DIM_INDEX = 2;
69
+ const ITALIC_INDEX = 3;
70
+ const UNDERLINE_INDEX = 4;
71
+ const BLINK_INDEX = 5;
72
+ const REVERSE_INDEX = 6;
73
+ const HIDE_INDEX = 7;
74
+ const STRIKETHROUGH_INDEX = 8;
75
+
76
+ module.exports = {
77
+ RESET_ALL,
78
+ RESET_FOREGROUND,
79
+ RESET_BACKGROUND,
80
+
81
+ SET_BOLD,
82
+ SET_DIM,
83
+ SET_ITALIC,
84
+ SET_UNDERLINE,
85
+ SET_SLOW_BLINK,
86
+ SET_RAPID_BLINK,
87
+ SET_REVERSE,
88
+ SET_HIDE,
89
+ SET_STRIKETHROUGH,
90
+ SET_DOUBLE_UNDERLINE,
91
+
92
+ RESET_BOLD_DIM,
93
+ RESET_ITALIC,
94
+ RESET_UNDERLINE,
95
+ RESET_BLINK,
96
+ RESET_REVERSE,
97
+ RESET_HIDE,
98
+ RESET_STRIKETHROUGH,
99
+
100
+ SET_FG_BLACK,
101
+ SET_FG_RED,
102
+ SET_FG_GREEN,
103
+ SET_FG_YELLOW,
104
+ SET_FG_BLUE,
105
+ SET_FG_MAGENTA,
106
+ SET_FG_CYAN,
107
+ SET_FG_WHITE,
108
+
109
+ SET_BG_BLACK,
110
+ SET_BG_RED,
111
+ SET_BG_GREEN,
112
+ SET_BG_YELLOW,
113
+ SET_BG_BLUE,
114
+ SET_BG_MAGENTA,
115
+ SET_BG_CYAN,
116
+ SET_BG_WHITE,
117
+
118
+ SET_FG_BRIGHT_BLACK,
119
+ SET_FG_BRIGHT_RED,
120
+ SET_FG_BRIGHT_GREEN,
121
+ SET_FG_BRIGHT_YELLOW,
122
+ SET_FG_BRIGHT_BLUE,
123
+ SET_FG_BRIGHT_MAGENTA,
124
+ SET_FG_BRIGHT_CYAN,
125
+ SET_FG_BRIGHT_WHITE,
126
+
127
+ SET_BG_BRIGHT_BLACK,
128
+ SET_BG_BRIGHT_RED,
129
+ SET_BG_BRIGHT_GREEN,
130
+ SET_BG_BRIGHT_YELLOW,
131
+ SET_BG_BRIGHT_BLUE,
132
+ SET_BG_BRIGHT_MAGENTA,
133
+ SET_BG_BRIGHT_CYAN,
134
+ SET_BG_BRIGHT_WHITE,
135
+
136
+ SET_FG_COLOR,
137
+ SET_BG_COLOR,
138
+
139
+ COLOR_MODE_256,
140
+ COLOR_MODE_RGB,
141
+
142
+ FOREGROUND_INDEX,
143
+ BACKGROUND_INDEX,
144
+ BOLD_DIM_INDEX,
145
+ ITALIC_INDEX,
146
+ UNDERLINE_INDEX,
147
+ BLINK_INDEX,
148
+ REVERSE_INDEX,
149
+ HIDE_INDEX,
150
+ STRIKETHROUGH_INDEX,
151
+ };
@@ -0,0 +1,10 @@
1
+ const extractFormattingCodes = require("./extract-formatting-codes");
2
+
3
+ function detectLastFormatting(text, latestFormatting) {
4
+ const currentFormattingCodes = extractFormattingCodes(latestFormatting);
5
+ const latestFormattingCodes = extractFormattingCodes(text, currentFormattingCodes);
6
+
7
+ return latestFormattingCodes.filter(code => code != null).map(code => `\x1b[${code}m`).join("");
8
+ }
9
+
10
+ module.exports = detectLastFormatting;
@@ -0,0 +1,26 @@
1
+ const applyFormattingCodes = require("./apply-formatting-codes");
2
+
3
+ function extractFormattingCodes(text, currentFormattingCodes = []) {
4
+ const colorRegex = /\x1b\[[0-9;]*m/g;
5
+ const matches = text.match(colorRegex);
6
+ if (matches == null || matches.length <= 0) {
7
+ return [];
8
+ }
9
+
10
+ for (const match of matches) {
11
+ const formattingCodes = match.slice(2, -1).split(";");
12
+ if (
13
+ formattingCodes.length === 1 &&
14
+ formattingCodes[0] === ""
15
+ ) {
16
+ currentFormattingCodes.splice(0);
17
+ continue;
18
+ }
19
+
20
+ applyFormattingCodes(currentFormattingCodes, formattingCodes);
21
+ }
22
+
23
+ return currentFormattingCodes;
24
+ }
25
+
26
+ module.exports = extractFormattingCodes;