diff options
author | Kenta Moriuchi <moriken@kimamass.com> | 2021-10-31 02:25:46 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-30 19:25:46 +0200 |
commit | 95b9e5f30f9b5e925b9102430eaee10713cb0aa6 (patch) | |
tree | b2e0b7b30de95e656f687ef0e2cf16ba30a19ab2 /ext/console/02_console.js | |
parent | 3fb23ab772e87b9314cd8608eb589c72a53efaee (diff) |
feat(ext/console): Display error.cause in console (#12462)
Diffstat (limited to 'ext/console/02_console.js')
-rw-r--r-- | ext/console/02_console.js | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/ext/console/02_console.js b/ext/console/02_console.js index 09d96fc09..8d650d8ec 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -883,6 +883,26 @@ return red(RegExpPrototypeToString(value)); // RegExps are red } + function inspectError(value) { + const causes = []; + + let err = value; + while ( + err.cause instanceof Error && err.cause !== value && + !ArrayPrototypeIncludes(causes, err.cause) // circular check + ) { + ArrayPrototypePush(causes, err.cause); + err = err.cause; + } + + return `${value.stack}${ + ArrayPrototypeJoin( + ArrayPrototypeMap(causes, (cause) => `\nCaused by ${cause.stack}`), + "", + ) + }`; + } + function inspectStringObject(value, inspectOptions) { const cyan = maybeColor(colors.cyan, inspectOptions); return cyan(`[String: "${StringPrototypeToString(value)}"]`); // wrappers are in cyan @@ -1141,7 +1161,7 @@ return String(value[privateCustomInspect](inspect)); } if (value instanceof Error) { - return String(value.stack); + return inspectError(value); } else if (ArrayIsArray(value)) { return inspectArray(value, level, inspectOptions); } else if (value instanceof Number) { |