From d42ee1bdef7e2490d359cb0a51a738d1519f0ad9 Mon Sep 17 00:00:00 2001 From: MrDoomBringer Date: Mon, 31 Oct 2022 15:17:27 -0400 Subject: [PATCH] Bring cloneDeep back --- src/core/QueryManager.ts | 5 +++++ src/utilities/common/cloneDeep.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/core/QueryManager.ts b/src/core/QueryManager.ts index 36fac27ef13..b3b511206a9 100644 --- a/src/core/QueryManager.ts +++ b/src/core/QueryManager.ts @@ -26,6 +26,7 @@ import { makeUniqueId, isDocumentNode, isNonNullObject, + cloneDeep, } from '../utilities'; import { ApolloError, isApolloError } from '../errors'; import { @@ -1037,6 +1038,10 @@ export class QueryManager { ): Observable> { const requestId = queryInfo.lastRequestId = this.generateRequestId(); + // Make sure we write the result below using the same options we were given, + // even though the input object may have been modified in the meantime. + options = cloneDeep(options); + // Performing transformForLink here gives this.cache a chance to fill in // missing fragment definitions (for example) before sending this document // through the link chain. diff --git a/src/utilities/common/cloneDeep.ts b/src/utilities/common/cloneDeep.ts index c4714a3b7e0..0da4986bfa7 100644 --- a/src/utilities/common/cloneDeep.ts +++ b/src/utilities/common/cloneDeep.ts @@ -27,7 +27,7 @@ function cloneDeepHelper(val: T, seen?: Map): T { // possible in all JS environments, so we will assume they exist/work. const copy = Object.create(Object.getPrototypeOf(val)); seen.set(val, copy); - Object.keys(val).forEach(key => { + Object.keys(val).concat(Object.getOwnPropertySymbols(val) as any).forEach(key => { copy[key] = cloneDeepHelper((val as any)[key], seen); }); return copy;