From 0a20519a66fdb44f70678e8a00861f034e2a00a6 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 27 Apr 2021 12:30:13 +0200 Subject: [PATCH 1/2] fix(cli-repl): hide prompt if --eval throws async err MONGOSH-715 --- packages/cli-repl/src/mongosh-repl.spec.ts | 14 ++++++++++++++ packages/cli-repl/src/mongosh-repl.ts | 5 +++++ 2 files changed, 19 insertions(+) diff --git a/packages/cli-repl/src/mongosh-repl.spec.ts b/packages/cli-repl/src/mongosh-repl.spec.ts index 1d2a38a883..502e9b46a1 100644 --- a/packages/cli-repl/src/mongosh-repl.spec.ts +++ b/packages/cli-repl/src/mongosh-repl.spec.ts @@ -710,4 +710,18 @@ describe('MongoshNodeRepl', () => { expect(output).to.contain('Atlas Data Lake > '); }); }); + + context('before the REPL starts', () => { + beforeEach(async() => { + await mongoshRepl.initialize(serviceProvider); + // No .start() call here. + }); + + it('does not show a prompt', async() => { + await mongoshRepl.loadExternalCode('setImmediate(() => { throw new Error(); })', ''); + await tick(); + expect(output).to.include('Error: \n'); + expect(output).not.to.include('>'); + }); + }); }); diff --git a/packages/cli-repl/src/mongosh-repl.ts b/packages/cli-repl/src/mongosh-repl.ts index 7bd0eee73e..59da586fe3 100644 --- a/packages/cli-repl/src/mongosh-repl.ts +++ b/packages/cli-repl/src/mongosh-repl.ts @@ -70,6 +70,7 @@ class MongoshNodeRepl implements EvaluationListener { onClearCommand?: EvaluationListener['onClearCommand']; insideAutoComplete: boolean; inspectDepth = 0; + started = false; constructor(options: MongoshNodeReplOptions) { this.input = options.input; @@ -151,6 +152,9 @@ class MongoshNodeRepl implements EvaluationListener { const originalDisplayPrompt = repl.displayPrompt.bind(repl); repl.displayPrompt = (...args: any[]) => { + if (!this.started) { + return; + } originalDisplayPrompt(...args); this.lineByLineInput.nextLine(); }; @@ -248,6 +252,7 @@ class MongoshNodeRepl implements EvaluationListener { this.lineByLineInput.start(); repl.setPrompt(await this.getShellPrompt(internalState)); repl.displayPrompt(); + this.started = true; } /** From 354635b84e9091adaec18b5b388902f00fa37491 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 27 Apr 2021 14:14:52 +0200 Subject: [PATCH 2/2] fixup: Let's see what CI says now :) --- packages/cli-repl/src/mongosh-repl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli-repl/src/mongosh-repl.ts b/packages/cli-repl/src/mongosh-repl.ts index 59da586fe3..b5fca92bd2 100644 --- a/packages/cli-repl/src/mongosh-repl.ts +++ b/packages/cli-repl/src/mongosh-repl.ts @@ -246,13 +246,13 @@ class MongoshNodeRepl implements EvaluationListener { // eslint-disable-next-line @typescript-eslint/no-unused-vars async startRepl(_initializationToken: InitializationToken): Promise { + this.started = true; const { repl, internalState } = this.runtimeState(); // Only start reading from the input *after* we set up everything, including // internalState.setCtx(). this.lineByLineInput.start(); repl.setPrompt(await this.getShellPrompt(internalState)); repl.displayPrompt(); - this.started = true; } /**