diff options
Diffstat (limited to 'ext/console/02_console.js')
-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) { |