Ver código fonte

fix(shared): fix toDisplayString on object with null prototype (#4335)

fix #4334
edison 4 anos atrás
pai
commit
42a334e12e

+ 4 - 1
packages/shared/__tests__/toDisplayString.spec.ts

@@ -19,6 +19,9 @@ describe('toDisplayString', () => {
     expect(toDisplayString(obj)).toBe(JSON.stringify(obj, null, 2))
     const arr = [obj]
     expect(toDisplayString(arr)).toBe(JSON.stringify(arr, null, 2))
+    const foo = Object.create(null)
+    foo.bar = 1
+    expect(toDisplayString(foo)).toBe(JSON.stringify(foo, null, 2))
   })
 
   test('refs', () => {
@@ -31,7 +34,7 @@ describe('toDisplayString', () => {
       })
     ).toBe(JSON.stringify({ n: 1, np: 2 }, null, 2))
   })
-  
+
   test('objects with custom toString', () => {
     class TestClass {
       toString() {

+ 4 - 1
packages/shared/src/toDisplayString.ts

@@ -2,6 +2,7 @@ import {
   isArray,
   isMap,
   isObject,
+  isFunction,
   isPlainObject,
   isSet,
   objectToString
@@ -14,7 +15,9 @@ import {
 export const toDisplayString = (val: unknown): string => {
   return val == null
     ? ''
-    : isArray(val) || (isObject(val) && val.toString === objectToString)
+    : isArray(val) ||
+      (isObject(val) &&
+        (val.toString === objectToString || !isFunction(val.toString)))
     ? JSON.stringify(val, replacer, 2)
     : String(val)
 }