Skip to content

Commit f0d501e

Browse files
authored
reroute stderr through printer and ensure printing is done around spinners (#2596)
1 parent 9a00a6b commit f0d501e

File tree

3 files changed

+33
-12
lines changed

3 files changed

+33
-12
lines changed

.changeset/floppy-pianos-fold.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@aws-amplify/cli-core': patch
3+
'@aws-amplify/sandbox': patch
4+
---
5+
6+
reroute stderr through printer and ensure printing is done around spinners

packages/cli-core/src/printer/printer.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,8 @@ export class Printer {
3333
print = (message: string) => {
3434
message = this.stringify(message);
3535
if (this.isSpinnerRunning()) {
36-
if (this.currentSpinner.instance?.prefixText) {
37-
const spinnerPrefixMessage = this.currentSpinner.instance?.prefixText;
38-
this.currentSpinner.instance.prefixText =
39-
message + EOL + spinnerPrefixMessage;
40-
return;
41-
}
42-
this.printNewLine();
36+
this.printWhileSpinnerRunning(message);
37+
return;
4338
}
4439
if (!this.ttyEnabled) {
4540
message = stripANSI(message);
@@ -189,6 +184,21 @@ export class Printer {
189184
process.stdout.moveCursor(0, -lines);
190185
};
191186

187+
private printWhileSpinnerRunning = (message: string) => {
188+
if (this.isSpinnerRunning()) {
189+
if (this.currentSpinner.instance?.prefixText) {
190+
const spinnerPrefixMessage = this.currentSpinner.instance?.prefixText;
191+
this.currentSpinner.instance.prefixText =
192+
message + EOL + spinnerPrefixMessage;
193+
} else {
194+
const spinnerMessage = this.currentSpinner.instance?.text;
195+
this.currentSpinner.instance?.clear();
196+
this.stdout.write(message);
197+
this.currentSpinner.instance?.start(spinnerMessage);
198+
}
199+
}
200+
};
201+
192202
private stringify = (msg: unknown): string => {
193203
if (typeof msg === 'string') {
194204
return msg;

packages/sandbox/src/file_watching_sandbox.ts

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -449,17 +449,22 @@ export class FileWatchingSandbox extends EventEmitter implements Sandbox {
449449
* Hack to suppress certain stderr messages until aws-cdk constructs
450450
* can use the toolkit's IoHost to deliver messages.
451451
* See tracking items https://github.com/aws/aws-cdk-cli/issues/158
452+
*
453+
* Rest of the stderr messages are rerouted to our printer so that they
454+
* don't get intermingled with spinners.
452455
*/
453456
private interceptStderr = () => {
454-
const originalStderrWrite = process.stderr.write.bind(process.stderr);
455457
process.stderr.write = (chunk) => {
456458
if (
457459
typeof chunk !== 'string' ||
458-
!['/index.mjs', '/index.mjs.map', 'Bundling asset', '⚡ Done in '].some(
459-
(prohibitedStrings) => chunk.includes(prohibitedStrings),
460+
!['Bundling asset'].some((prohibitedStrings) =>
461+
chunk.includes(prohibitedStrings),
460462
)
461-
)
462-
return originalStderrWrite(chunk);
463+
) {
464+
this.printer.log(
465+
typeof chunk === 'string' ? chunk : chunk.toLocaleString(),
466+
);
467+
}
463468
return true;
464469
};
465470
};

0 commit comments

Comments
 (0)