From bc4f4e575c033f20cf58fbeed1578d55680082e3 Mon Sep 17 00:00:00 2001 From: Milan Suk Date: Tue, 30 Apr 2024 17:54:46 +0200 Subject: [PATCH] fix: replaceDeepEqual for objects created by Object.create --- packages/query-core/src/__tests__/utils.test.tsx | 8 ++++++++ packages/query-core/src/utils.ts | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/packages/query-core/src/__tests__/utils.test.tsx b/packages/query-core/src/__tests__/utils.test.tsx index 064795279b2..fdecf0d9923 100644 --- a/packages/query-core/src/__tests__/utils.test.tsx +++ b/packages/query-core/src/__tests__/utils.test.tsx @@ -73,6 +73,14 @@ describe('core/utils', () => { expect(isPlainObject(Object.create(Graph))).toBeFalsy() }) + + it('should return `false` for object with custom prototype', () => { + const CustomProto = Object.create({ a: 1 }) + const obj = Object.create(CustomProto) + obj.b = 2 + + expect(isPlainObject(obj)).toBeFalsy() + }) }) describe('isPlainArray', () => { diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts index c100ac4baa0..251b55cba1b 100644 --- a/packages/query-core/src/utils.ts +++ b/packages/query-core/src/utils.ts @@ -300,6 +300,11 @@ export function isPlainObject(o: any): o is Object { return false } + // Handles Objects created by Object.create() + if (Object.getPrototypeOf(o) !== Object.prototype) { + return false + } + // Most likely a plain Object return true }