From d07839eb402bb6ae41c23c8483bb59012870995f Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 29 Jul 2021 14:54:23 -0400 Subject: [PATCH 1/2] Delay initializing stringifyCanon until canonicalStringify used. May help with #8557. --- src/cache/inmemory/object-canon.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cache/inmemory/object-canon.ts b/src/cache/inmemory/object-canon.ts index 9ffb706418d..c6b96d1ba2e 100644 --- a/src/cache/inmemory/object-canon.ts +++ b/src/cache/inmemory/object-canon.ts @@ -200,6 +200,9 @@ type SortedKeysInfo = { // version of JSON.stringify, which automatically sorts object keys. export const canonicalStringify = Object.assign(function (value: any): string { if (isObjectOrArray(value)) { + if (stringifyCanon === void 0) { + resetCanonicalStringify(); + } const canonical = stringifyCanon.admit(value); let json = stringifyCache.get(canonical); if (json === void 0) { @@ -212,13 +215,14 @@ export const canonicalStringify = Object.assign(function (value: any): string { } return JSON.stringify(value); }, { - reset() { - stringifyCanon = new ObjectCanon; - }, + reset: resetCanonicalStringify, }); // Can be reset by calling canonicalStringify.reset(). -let stringifyCanon = new ObjectCanon; +let stringifyCanon: ObjectCanon; +let stringifyCache: WeakMap; -// Needs no resetting, thanks to weakness. -const stringifyCache = new WeakMap(); +function resetCanonicalStringify() { + stringifyCanon = new ObjectCanon; + stringifyCache = new (canUseWeakMap ? WeakMap : Map)(); +} From ff01c161adb2e2452eff37bf15b31e9d4c707880 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Thu, 29 Jul 2021 15:14:37 -0400 Subject: [PATCH 2/2] Mention PR #8557 in CHANGELOG.md. --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fa69ba487b3..e554240567f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## Apollo Client 3.4.1 + +### Bug Fixes + +- Initialize `stringifyCanon` lazily, when `canonicalStringify` is first called, fixing `Uncaught ReferenceError: __DEV__ is not defined` errors due to usage of `__DEV__` before declaration.
+ [@benjamn](https://github.com/benjamn) in [#8557](https://github.com/apollographql/apollo-client/pull/8557) + ## Apollo Client 3.4.0 ### New documentation