From ebd8fe2c1b8b50bfeb2da20aeca5671300fb5564 Mon Sep 17 00:00:00 2001 From: Lenz Weber-Tronic Date: Mon, 20 Nov 2023 17:38:13 +0100 Subject: [PATCH] Clarify types of `EntityStore.makeCacheKey` (#11371) --- .api-reports/api-report-cache.md | 6 ++++++ .api-reports/api-report-core.md | 6 ++++++ .api-reports/api-report-utilities.md | 6 ++++++ .api-reports/api-report.md | 6 ++++++ .changeset/thick-mice-collect.md | 5 +++++ src/cache/inmemory/entityStore.ts | 22 ++++++++++++++++++++++ src/cache/inmemory/readFromStore.ts | 4 ++++ 7 files changed, 55 insertions(+) create mode 100644 .changeset/thick-mice-collect.md diff --git a/.api-reports/api-report-cache.md b/.api-reports/api-report-cache.md index c84e7527da6..2efb3c2ed67 100644 --- a/.api-reports/api-report-cache.md +++ b/.api-reports/api-report-cache.md @@ -355,6 +355,12 @@ export abstract class EntityStore implements NormalizedCache { // (undocumented) protected lookup(dataId: string, dependOnExistence?: boolean): StoreObject | undefined; // (undocumented) + makeCacheKey(document: DocumentNode, callback: Cache_2.WatchCallback, details: string): object; + // (undocumented) + makeCacheKey(selectionSet: SelectionSetNode, parent: string | StoreObject, varString: string | undefined, canonizeResults: boolean): object; + // (undocumented) + makeCacheKey(field: FieldNode, array: readonly any[], varString: string | undefined): object; + // (undocumented) makeCacheKey(...args: any[]): object; // (undocumented) merge(older: string | StoreObject, newer: StoreObject | string): void; diff --git a/.api-reports/api-report-core.md b/.api-reports/api-report-core.md index f8c570ceebc..8edcfc86e4a 100644 --- a/.api-reports/api-report-core.md +++ b/.api-reports/api-report-core.md @@ -670,6 +670,12 @@ abstract class EntityStore implements NormalizedCache { // (undocumented) protected lookup(dataId: string, dependOnExistence?: boolean): StoreObject | undefined; // (undocumented) + makeCacheKey(document: DocumentNode, callback: Cache_2.WatchCallback, details: string): object; + // (undocumented) + makeCacheKey(selectionSet: SelectionSetNode, parent: string | StoreObject, varString: string | undefined, canonizeResults: boolean): object; + // (undocumented) + makeCacheKey(field: FieldNode, array: readonly any[], varString: string | undefined): object; + // (undocumented) makeCacheKey(...args: any[]): object; // (undocumented) merge(older: string | StoreObject, newer: StoreObject | string): void; diff --git a/.api-reports/api-report-utilities.md b/.api-reports/api-report-utilities.md index 93fab5008fc..bd662573302 100644 --- a/.api-reports/api-report-utilities.md +++ b/.api-reports/api-report-utilities.md @@ -827,6 +827,12 @@ abstract class EntityStore implements NormalizedCache { // (undocumented) protected lookup(dataId: string, dependOnExistence?: boolean): StoreObject | undefined; // (undocumented) + makeCacheKey(document: DocumentNode, callback: Cache_2.WatchCallback, details: string): object; + // (undocumented) + makeCacheKey(selectionSet: SelectionSetNode, parent: string | StoreObject, varString: string | undefined, canonizeResults: boolean): object; + // (undocumented) + makeCacheKey(field: FieldNode, array: readonly any[], varString: string | undefined): object; + // (undocumented) makeCacheKey(...args: any[]): object; // (undocumented) merge(older: string | StoreObject, newer: StoreObject | string): void; diff --git a/.api-reports/api-report.md b/.api-reports/api-report.md index 71c954da766..20b14b5c8a5 100644 --- a/.api-reports/api-report.md +++ b/.api-reports/api-report.md @@ -831,6 +831,12 @@ abstract class EntityStore implements NormalizedCache { // (undocumented) protected lookup(dataId: string, dependOnExistence?: boolean): StoreObject | undefined; // (undocumented) + makeCacheKey(document: DocumentNode, callback: Cache_2.WatchCallback, details: string): object; + // (undocumented) + makeCacheKey(selectionSet: SelectionSetNode, parent: string | StoreObject, varString: string | undefined, canonizeResults: boolean): object; + // (undocumented) + makeCacheKey(field: FieldNode, array: readonly any[], varString: string | undefined): object; + // (undocumented) makeCacheKey(...args: any[]): object; // (undocumented) merge(older: string | StoreObject, newer: StoreObject | string): void; diff --git a/.changeset/thick-mice-collect.md b/.changeset/thick-mice-collect.md new file mode 100644 index 00000000000..47ed2e58cfd --- /dev/null +++ b/.changeset/thick-mice-collect.md @@ -0,0 +1,5 @@ +--- +"@apollo/client": patch +--- + +Clarify types of `EntityStore.makeCacheKey`. diff --git a/src/cache/inmemory/entityStore.ts b/src/cache/inmemory/entityStore.ts index a31f96db63a..4520d9740da 100644 --- a/src/cache/inmemory/entityStore.ts +++ b/src/cache/inmemory/entityStore.ts @@ -32,6 +32,7 @@ import type { DeleteModifier, ModifierDetails, } from "../core/types/common.js"; +import type { DocumentNode, FieldNode, SelectionSetNode } from "graphql"; const DELETE: DeleteModifier = Object.create(null); const delModifier: Modifier = () => DELETE; @@ -522,6 +523,27 @@ export abstract class EntityStore implements NormalizedCache { } // Used to compute cache keys specific to this.group. + /** overload for `InMemoryCache.maybeBroadcastWatch` */ + public makeCacheKey( + document: DocumentNode, + callback: Cache.WatchCallback, + details: string + ): object; + /** overload for `StoreReader.executeSelectionSet` */ + public makeCacheKey( + selectionSet: SelectionSetNode, + parent: string /* = ( Reference.__ref ) */ | StoreObject, + varString: string | undefined, + canonizeResults: boolean + ): object; + /** overload for `StoreReader.executeSubSelectedArray` */ + public makeCacheKey( + field: FieldNode, + array: readonly any[], + varString: string | undefined + ): object; + /** @deprecated This is only meant for internal usage, + * in your own code please use a `Trie` instance instead. */ public makeCacheKey(...args: any[]): object; public makeCacheKey() { return this.group.keyMaker.lookupArray(arguments); diff --git a/src/cache/inmemory/readFromStore.ts b/src/cache/inmemory/readFromStore.ts index 4ddbea78b43..35b9b1dce17 100644 --- a/src/cache/inmemory/readFromStore.ts +++ b/src/cache/inmemory/readFromStore.ts @@ -153,6 +153,10 @@ export class StoreReader { this.canon = config.canon || new ObjectCanon(); + // memoized functions in this class will be "garbage-collected" + // by recreating the whole `StoreReader` in + // `InMemoryCache.resetResultsCache` + // (triggered from `InMemoryCache.gc` with `resetResultCache: true`) this.executeSelectionSet = wrap( (options) => { const { canonizeResults } = options.context;