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 }