diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2022-04-16 16:12:26 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-16 16:12:26 +0200 |
commit | a87be28a46b67e53354f8ce69386057ddbb0f46c (patch) | |
tree | 5615afd3ac57821edd7c782cfe33d253777a8aa3 /ext | |
parent | 0bb96cde726127291dccb62145e76a50b2efcd2f (diff) |
feat: Better formatting for AggregateError (#14285)
This commit adds "aggregated" field to "deno_core::JsError" that stores
instances of "JsError" recursively to properly handle "AggregateError"
formatting. Appropriate logics was added to "PrettyJsError" and
"console" API to format AggregateErrors.
Co-authored-by: Nayeem Rahman <nayeemrmn99@gmail.com>
Diffstat (limited to 'ext')
-rw-r--r-- | ext/console/02_console.js | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/ext/console/02_console.js b/ext/console/02_console.js index d29bee801..0f51bded8 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -9,6 +9,8 @@ const colors = window.__bootstrap.colors; const { ArrayBufferIsView, + AggregateErrorPrototype, + ArrayPrototypeUnshift, isNaN, DataViewPrototype, DatePrototype, @@ -947,16 +949,50 @@ } ArrayPrototypeShift(causes); - return (MapPrototypeGet(refMap, value) ?? "") + value.stack + - ArrayPrototypeJoin( + let finalMessage = (MapPrototypeGet(refMap, value) ?? ""); + + if (ObjectPrototypeIsPrototypeOf(AggregateErrorPrototype, value)) { + const stackLines = StringPrototypeSplit(value.stack, "\n"); + while (true) { + const line = ArrayPrototypeShift(stackLines); + if (RegExpPrototypeTest(/\s+at/, line)) { + ArrayPrototypeUnshift(stackLines, line); + break; + } + + finalMessage += line; + finalMessage += "\n"; + } + const aggregateMessage = ArrayPrototypeJoin( ArrayPrototypeMap( - causes, - (cause) => - "\nCaused by " + (MapPrototypeGet(refMap, cause) ?? "") + - (cause?.stack ?? cause), + value.errors, + (error) => + StringPrototypeReplace( + inspectArgs([error]), + /^(?!\s*$)/gm, + StringPrototypeRepeat(" ", 4), + ), ), - "", + "\n", ); + finalMessage += aggregateMessage; + finalMessage += "\n"; + finalMessage += ArrayPrototypeJoin(stackLines, "\n"); + } else { + finalMessage += value.stack; + } + + finalMessage += ArrayPrototypeJoin( + ArrayPrototypeMap( + causes, + (cause) => + "\nCaused by " + (MapPrototypeGet(refMap, cause) ?? "") + + (cause?.stack ?? cause), + ), + "", + ); + + return finalMessage; } function inspectStringObject(value, inspectOptions) { |