fix(ext/console): prevent duplicate error printing when the cause is assigned (#25327)

This commit fixes the error format when the cause is assigned
separately, ensuring that the cause is only printed once instead of
twice.

The fix addresses issue
[#21651](https://github.com/denoland/deno/issues/21651).
This commit is contained in:
MujahedSafaa 2024-09-12 15:02:32 +03:00 committed by GitHub
parent c9065103b8
commit 4983f763d4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 0 deletions

View File

@ -1287,6 +1287,7 @@ function getKeys(value, showHidden) {
ArrayPrototypePushApply(keys, ArrayPrototypeFilter(symbols, filter));
}
}
keys = ArrayPrototypeFilter(keys, (key) => key !== "cause");
return keys;
}

View File

@ -1894,6 +1894,25 @@ Deno.test(function consoleLogShouldNotThrowErrorWhenInputIsProxiedTypedArray() {
});
});
Deno.test(function consoleLogWhenCauseIsAssignedShouldNotPrintCauseTwice() {
mockConsole((console, out) => {
const typeError = new TypeError("Type incorrect");
const syntaxError = new SyntaxError("Improper syntax");
typeError.cause = syntaxError;
console.log(typeError);
const result = stripAnsiCode(out.toString());
// Filter out stack trace lines, keeping only the first line and the cause line
const filteredOutput = result
.split("\n")
.filter((line) => !line.trim().startsWith("at"))
.join("\n");
const expectedResult =
"TypeError: Type incorrect\nCaused by SyntaxError: Improper syntax\n";
assertEquals(filteredOutput.trim(), expectedResult.trim());
});
});
// console.log(new Proxy(new RegExp(), {}))
Deno.test(function consoleLogShouldNotThrowErrorWhenInputIsProxiedRegExp() {
mockConsole((console, out) => {