From 64abb65f0514afc1f10c426561e5150d9cae6b45 Mon Sep 17 00:00:00 2001 From: Colin Ihrig Date: Mon, 13 Jun 2022 10:59:22 -0400 Subject: [PATCH] feat(console): pass options and depth to custom inspects (#14855) This commit updates Deno.inspect() to pass inspect options and the current inspect depth to custom inspect functions. Refs: https://github.com/denoland/deno/issues/8099 Refs: https://github.com/denoland/deno/issues/14171 --- cli/tests/unit/console_test.ts | 9 ++++++++- ext/console/02_console.js | 8 +++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/cli/tests/unit/console_test.ts b/cli/tests/unit/console_test.ts index d349266e8b..fbaba9e432 100644 --- a/cli/tests/unit/console_test.ts +++ b/cli/tests/unit/console_test.ts @@ -884,7 +884,14 @@ Deno.test(async function consoleTestStringifyPromises() { Deno.test(function consoleTestWithCustomInspector() { class A { - [customInspect](): string { + [customInspect]( + inspect: unknown, + options: Deno.InspectOptions, + depth: number, + ): string { + assertEquals(typeof inspect, "function"); + assertEquals(typeof options, "object"); + assertEquals(depth, 0); return "b"; } } diff --git a/ext/console/02_console.js b/ext/console/02_console.js index 638047b3a9..71eb581980 100644 --- a/ext/console/02_console.js +++ b/ext/console/02_console.js @@ -335,7 +335,7 @@ ReflectHas(value, customInspect) && typeof value[customInspect] === "function" ) { - return String(value[customInspect](inspect)); + return String(value[customInspect](inspect, inspectOptions, level)); } // Might be Function/AsyncFunction/GeneratorFunction/AsyncGeneratorFunction let cstrName = ObjectGetPrototypeOf(value)?.constructor?.name; @@ -1258,7 +1258,7 @@ ReflectHas(value, customInspect) && typeof value[customInspect] === "function" ) { - return String(value[customInspect](inspect)); + return String(value[customInspect](inspect, inspectOptions, level)); } // This non-unique symbol is used to support op_crates, ie. // in extensions/web we don't want to depend on public @@ -1273,7 +1273,9 @@ // inspect implementations in `extensions` need it, but may not have access // to the `Deno` namespace in web workers. Remove when the `Deno` // namespace is always enabled. - return String(value[privateCustomInspect](inspect)); + return String( + value[privateCustomInspect](inspect, inspectOptions, level), + ); } if (ObjectPrototypeIsPrototypeOf(ErrorPrototype, value)) { return inspectError(value, maybeColor(colors.cyan, inspectOptions));