From 1d905633c7434e5e3eff514d2d8fc9857ffbb198 Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Fri, 20 Feb 2026 11:48:24 +0500 Subject: [PATCH 1/2] fix console.log(error) should include stack trace --- .../runtime/src/main/cpp/runtime/console/Console.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test-app/runtime/src/main/cpp/runtime/console/Console.cpp b/test-app/runtime/src/main/cpp/runtime/console/Console.cpp index 24bb449..e954f86 100644 --- a/test-app/runtime/src/main/cpp/runtime/console/Console.cpp +++ b/test-app/runtime/src/main/cpp/runtime/console/Console.cpp @@ -75,12 +75,23 @@ std::string transformJSObject(napi_env env, napi_value object) { // Check if the object has a toString method napi_has_named_property(env, object, "toString", &hasToString); + if (hasToString) { napi_get_named_property(env, object, "toString", &toStringFunc); if (napi_util::is_of_type(env, toStringFunc, napi_function)) { napi_value result; napi_call_function(env, object, toStringFunc, 0, nullptr, &result); auto value = ArgConverter::ConvertToString(env, result); + + bool is_error = false; + napi_is_error(env, object, &is_error); + if (is_error) { + napi_value stack; + napi_get_named_property(env, object, "stack", &stack); + auto stack_value = ArgConverter::ConvertToString(env, stack); + value += "\n" + stack_value; + } + auto hasCustomToStringImplementation = value.find("[object Object]") == std::string::npos; if (hasCustomToStringImplementation) return value; } From cd909f69135a7be888c21dc8702f28941848aabc Mon Sep 17 00:00:00 2001 From: Ammar Ahmed Date: Sat, 21 Feb 2026 10:40:25 +0500 Subject: [PATCH 2/2] add safety checks --- .../runtime/src/main/cpp/runtime/console/Console.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/test-app/runtime/src/main/cpp/runtime/console/Console.cpp b/test-app/runtime/src/main/cpp/runtime/console/Console.cpp index e954f86..6e10c5e 100644 --- a/test-app/runtime/src/main/cpp/runtime/console/Console.cpp +++ b/test-app/runtime/src/main/cpp/runtime/console/Console.cpp @@ -87,9 +87,13 @@ std::string transformJSObject(napi_env env, napi_value object) { napi_is_error(env, object, &is_error); if (is_error) { napi_value stack; - napi_get_named_property(env, object, "stack", &stack); - auto stack_value = ArgConverter::ConvertToString(env, stack); - value += "\n" + stack_value; + napi_status status = napi_get_named_property(env, object, "stack", &stack); + if (status == napi_ok && !napi_util::is_null_or_undefined(env, stack)) { + auto stack_value = ArgConverter::ConvertToString(env, stack); + if (!stack_value.empty() && value.find(stack_value) == std::string::npos) { + value += "\n" + stack_value; + } + } } auto hasCustomToStringImplementation = value.find("[object Object]") == std::string::npos;