summaryrefslogtreecommitdiff
path: root/cli/js
diff options
context:
space:
mode:
Diffstat (limited to 'cli/js')
-rw-r--r--cli/js/console.ts7
-rw-r--r--cli/js/console_test.ts21
2 files changed, 26 insertions, 2 deletions
diff --git a/cli/js/console.ts b/cli/js/console.ts
index 9f0ce4bd6..e6b54d8c1 100644
--- a/cli/js/console.ts
+++ b/cli/js/console.ts
@@ -327,8 +327,11 @@ function createObjectString(
...args: [ConsoleContext, number, number]
): string {
if (customInspect in value && typeof value[customInspect] === "function") {
- return String(value[customInspect]!());
- } else if (value instanceof Error) {
+ try {
+ return String(value[customInspect]!());
+ } catch {}
+ }
+ if (value instanceof Error) {
return String(value.stack);
} else if (Array.isArray(value)) {
return createArrayString(value, ...args);
diff --git a/cli/js/console_test.ts b/cli/js/console_test.ts
index 903e65a82..50fe1d66a 100644
--- a/cli/js/console_test.ts
+++ b/cli/js/console_test.ts
@@ -190,6 +190,27 @@ test(function consoleTestWithCustomInspector(): void {
assertEquals(stringify(new A()), "b");
});
+test(function consoleTestWithCustomInspectorError(): void {
+ class A {
+ [customInspect](): string {
+ throw new Error("BOOM");
+ return "b";
+ }
+ }
+
+ assertEquals(stringify(new A()), "A {}");
+
+ class B {
+ constructor(public field: { a: string }) {}
+ [customInspect](): string {
+ return this.field.a;
+ }
+ }
+
+ assertEquals(stringify(new B({ a: "a" })), "a");
+ assertEquals(stringify(B.prototype), "{}");
+});
+
test(function consoleTestWithIntegerFormatSpecifier(): void {
assertEquals(stringify("%i"), "%i");
assertEquals(stringify("%i", 42.0), "42");