@@ -84,9 +84,37 @@ std::string buildStringFromArg(napi_env env, napi_value val) {
84
84
napi_coerce_to_string (env, val, &funcString);
85
85
return napi_util::get_string_value (env, funcString);
86
86
} else if (napi_util::is_array (env, val)) {
87
- napi_value global;
88
- napi_get_global (env, &global);
89
- return JsonStringifyObject (env, val, false );
87
+ napi_value cachedSelf = val;
88
+
89
+ // Get array length
90
+ uint32_t arrayLength;
91
+ napi_get_array_length (env, val, &arrayLength);
92
+
93
+ std::stringstream arrayStr;
94
+ arrayStr << " [" ;
95
+
96
+ for (uint32_t i = 0 ; i < arrayLength; i++) {
97
+ napi_value propertyValue;
98
+ napi_get_element (env, val, i, &propertyValue);
99
+
100
+ // Check for circular reference
101
+ bool isStrictEqual = false ;
102
+ napi_strict_equals (env, propertyValue, cachedSelf, &isStrictEqual);
103
+
104
+ if (isStrictEqual) {
105
+ arrayStr << " [Circular]" ;
106
+ } else {
107
+ std::string elementString = buildStringFromArg (env, propertyValue);
108
+ arrayStr << elementString;
109
+ }
110
+
111
+ if (i != arrayLength - 1 ) {
112
+ arrayStr << " , " ;
113
+ }
114
+ }
115
+
116
+ arrayStr << " ]" ;
117
+ return arrayStr.str ();
90
118
} else if (type == napi_object) {
91
119
return transformJSObject (env, val);
92
120
} else if (type == napi_symbol) {
0 commit comments