From 50833b629739140ba92dac1c96b22724aa64f896 Mon Sep 17 00:00:00 2001 From: TkDodo Date: Wed, 14 Jan 2026 09:33:15 +0100 Subject: [PATCH 1/2] fix(query-core): replaceEqualDeep max depth --- packages/query-core/src/utils.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/query-core/src/utils.ts b/packages/query-core/src/utils.ts index 61bb09d8ba..33d023e9ca 100644 --- a/packages/query-core/src/utils.ts +++ b/packages/query-core/src/utils.ts @@ -310,12 +310,14 @@ export function partialDeepEqual(a: any, b: any): boolean { * If not, it will replace any deeply equal children of `b` with those of `a`. * This can be used for structural sharing between JSON values for example. */ -export function replaceEqualDeep(a: unknown, b: T): T -export function replaceEqualDeep(a: any, b: any): any { +export function replaceEqualDeep(a: unknown, b: T, depth?: number): T +export function replaceEqualDeep(a: any, b: any, depth = 0): any { if (a === b) { return a } + if (depth > 500) return b + const array = isPlainArray(a) && isPlainArray(b) if (array || (isPlainObject(a) && isPlainObject(b))) { @@ -328,7 +330,7 @@ export function replaceEqualDeep(a: any, b: any): any { for (let i = 0; i < bSize; i++) { const key = array ? i : bItems[i] - copy[key] = replaceEqualDeep(a[key], b[key]) + copy[key] = replaceEqualDeep(a[key], b[key], depth + 1) if (copy[key] === a[key]) { equalItems++ } From cab5c34dd78cc2c53c2c3a254293975d1978e981 Mon Sep 17 00:00:00 2001 From: Jonghyeon Ko Date: Sat, 17 Jan 2026 11:41:10 +0900 Subject: [PATCH 2/2] Add changeset for query-core patch --- .changeset/olive-clouds-check.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/olive-clouds-check.md diff --git a/.changeset/olive-clouds-check.md b/.changeset/olive-clouds-check.md new file mode 100644 index 0000000000..be7b921799 --- /dev/null +++ b/.changeset/olive-clouds-check.md @@ -0,0 +1,5 @@ +--- +"@tanstack/query-core": patch +--- + +fix(query-core): replaceEqualDeep max depth