From eafec30b7a8b15d8d1ba3cd18af2637dac8ed0e0 Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 2 Sep 2022 19:38:06 +0800 Subject: [PATCH] fix(cli/repl): await Promise.any([])... (#15623) --- cli/tests/integration/repl_tests.rs | 14 ++++++++++++++ cli/tests/unit/console_test.ts | 11 +++++++++++ cli/tools/repl/session.rs | 20 +++++++++++++------- ext/console/02_console.js | 2 ++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/cli/tests/integration/repl_tests.rs b/cli/tests/integration/repl_tests.rs index 07b7575a08..cdeb36c9cc 100644 --- a/cli/tests/integration/repl_tests.rs +++ b/cli/tests/integration/repl_tests.rs @@ -861,3 +861,17 @@ fn repl_report_error() { assert_contains!(out, "1\n2\nundefined\n"); assert!(err.is_empty()); } + +#[test] +fn pty_aggregate_error() { + let (out, err) = util::run_and_collect_output( + true, + "repl", + Some(vec!["await Promise.any([])"]), + Some(vec![("NO_COLOR".to_owned(), "1".to_owned())]), + false, + ); + + assert_contains!(out, "AggregateError"); + assert!(err.is_empty()); +} diff --git a/cli/tests/unit/console_test.ts b/cli/tests/unit/console_test.ts index 1b364eda10..1faef6bd77 100644 --- a/cli/tests/unit/console_test.ts +++ b/cli/tests/unit/console_test.ts @@ -2027,3 +2027,14 @@ Deno.test(function inspectStringAbbreviation() { '[ "This is a ..." ]', ); }); + +Deno.test(async function inspectAggregateError() { + try { + await Promise.any([]); + } catch (err) { + assertEquals( + Deno.inspect(err).trimEnd(), + "AggregateError: All promises were rejected", + ); + } +}); diff --git a/cli/tools/repl/session.rs b/cli/tools/repl/session.rs index d5058ab720..f2cdfe568b 100644 --- a/cli/tools/repl/session.rs +++ b/cli/tools/repl/session.rs @@ -165,8 +165,18 @@ impl ReplSession { exception_details, } = evaluate_response.value; - if exception_details.is_some() { + Ok(if let Some(exception_details) = exception_details { self.set_last_thrown_error(&result).await?; + let description = match exception_details.exception { + Some(exception) => exception + .description + .unwrap_or_else(|| "Unknown exception".to_string()), + None => "Unknown exception".to_string(), + }; + EvaluationOutput::Error(format!( + "{} {}", + exception_details.text, description + )) } else { self .language_server @@ -174,12 +184,8 @@ impl ReplSession { .await; self.set_last_eval_result(&result).await?; - } - - let value = self.get_eval_value(&result).await?; - Ok(match exception_details { - Some(_) => EvaluationOutput::Error(format!("Uncaught {}", value)), - None => EvaluationOutput::Value(value), + let value = self.get_eval_value(&result).await?; + EvaluationOutput::Value(value) }) } Err(err) => { diff --git a/ext/console/02_console.js b/ext/console/02_console.js index 9edf78ffdc..24918ea1a1 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -959,6 +959,8 @@ if (RegExpPrototypeTest(/\s+at/, line)) { ArrayPrototypeUnshift(stackLines, line); break; + } else if (typeof line === "undefined") { + break; } finalMessage += line;