@apollo/client 4.1.0-alpha.8 → 4.1.0-alpha.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/__cjs/cache/core/cache.cjs +64 -24
- package/__cjs/cache/core/cache.cjs.map +1 -1
- package/__cjs/cache/core/cache.d.cts +47 -0
- package/__cjs/cache/core/types/Cache.d.cts +38 -0
- package/__cjs/cache/inmemory/entityStore.cjs +3 -3
- package/__cjs/cache/inmemory/entityStore.cjs.map +1 -1
- package/__cjs/cache/inmemory/inMemoryCache.cjs +47 -0
- package/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
- package/__cjs/cache/inmemory/inMemoryCache.d.cts +47 -0
- package/__cjs/cache/inmemory/key-extractor.cjs +1 -1
- package/__cjs/cache/inmemory/policies.cjs +14 -5
- package/__cjs/cache/inmemory/policies.cjs.map +1 -1
- package/__cjs/cache/inmemory/policies.d.cts +5 -0
- package/__cjs/cache/inmemory/readFromStore.cjs +3 -3
- package/__cjs/cache/inmemory/readFromStore.cjs.map +1 -1
- package/__cjs/cache/inmemory/types.d.cts +1 -0
- package/__cjs/cache/inmemory/writeToStore.cjs +6 -5
- package/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
- package/__cjs/cache/inmemory/writeToStore.d.cts +2 -1
- package/__cjs/core/ApolloClient.cjs +14 -14
- package/__cjs/core/ApolloClient.cjs.map +1 -1
- package/__cjs/core/ApolloClient.d.cts +21 -1
- package/__cjs/core/ObservableQuery.cjs +22 -8
- package/__cjs/core/ObservableQuery.cjs.map +1 -1
- package/__cjs/core/ObservableQuery.d.cts +1 -0
- package/__cjs/core/QueryInfo.cjs +3 -0
- package/__cjs/core/QueryInfo.cjs.map +1 -1
- package/__cjs/core/QueryManager.cjs +27 -17
- package/__cjs/core/QueryManager.cjs.map +1 -1
- package/__cjs/core/QueryManager.d.cts +18 -2
- package/__cjs/invariantErrorCodes.cjs +39 -33
- package/__cjs/link/error/index.cjs +1 -1
- package/__cjs/link/error/index.cjs.map +1 -1
- package/__cjs/link/error/index.d.cts +1 -1
- package/__cjs/link/http/parseAndCheckHttpResponse.cjs +1 -1
- package/__cjs/link/http/parseAndCheckHttpResponse.cjs.map +1 -1
- package/__cjs/react/hooks/useLazyQuery.cjs +1 -0
- package/__cjs/react/hooks/useLazyQuery.cjs.map +1 -1
- package/__cjs/react/hooks/useQuery.cjs +7 -4
- package/__cjs/react/hooks/useQuery.cjs.map +1 -1
- package/__cjs/react/hooks/useSuspenseQuery.cjs +2 -0
- package/__cjs/react/hooks/useSuspenseQuery.cjs.map +1 -1
- package/__cjs/utilities/internal/checkDocument.cjs +2 -4
- package/__cjs/utilities/internal/checkDocument.cjs.map +1 -1
- package/__cjs/utilities/internal/constants.cjs +21 -0
- package/__cjs/utilities/internal/constants.cjs.map +1 -0
- package/__cjs/utilities/internal/constants.d.cts +18 -0
- package/__cjs/utilities/internal/index.cjs +6 -1
- package/__cjs/utilities/internal/index.cjs.map +1 -1
- package/__cjs/utilities/internal/index.d.cts +2 -0
- package/__cjs/utilities/internal/mapObservableFragment.cjs +27 -0
- package/__cjs/utilities/internal/mapObservableFragment.cjs.map +1 -0
- package/__cjs/utilities/internal/mapObservableFragment.d.cts +3 -0
- package/__cjs/utilities/internal/memoize.cjs +31 -0
- package/__cjs/utilities/internal/memoize.cjs.map +1 -0
- package/__cjs/utilities/internal/memoize.d.cts +8 -0
- package/__cjs/version.cjs +1 -1
- package/cache/core/cache.d.ts +47 -0
- package/cache/core/cache.js +65 -25
- package/cache/core/cache.js.map +1 -1
- package/cache/core/types/Cache.d.ts +38 -0
- package/cache/core/types/Cache.js.map +1 -1
- package/cache/inmemory/entityStore.js +3 -3
- package/cache/inmemory/entityStore.js.map +1 -1
- package/cache/inmemory/inMemoryCache.d.ts +47 -0
- package/cache/inmemory/inMemoryCache.js +47 -0
- package/cache/inmemory/inMemoryCache.js.map +1 -1
- package/cache/inmemory/key-extractor.js +1 -1
- package/cache/inmemory/policies.d.ts +5 -0
- package/cache/inmemory/policies.js +14 -5
- package/cache/inmemory/policies.js.map +1 -1
- package/cache/inmemory/readFromStore.js +3 -3
- package/cache/inmemory/readFromStore.js.map +1 -1
- package/cache/inmemory/types.d.ts +1 -0
- package/cache/inmemory/types.js.map +1 -1
- package/cache/inmemory/writeToStore.d.ts +2 -1
- package/cache/inmemory/writeToStore.js +6 -5
- package/cache/inmemory/writeToStore.js.map +1 -1
- package/core/ApolloClient.d.ts +21 -1
- package/core/ApolloClient.js +15 -15
- package/core/ApolloClient.js.map +1 -1
- package/core/ObservableQuery.d.ts +1 -0
- package/core/ObservableQuery.js +23 -9
- package/core/ObservableQuery.js.map +1 -1
- package/core/QueryInfo.js +3 -0
- package/core/QueryInfo.js.map +1 -1
- package/core/QueryManager.d.ts +18 -2
- package/core/QueryManager.js +28 -18
- package/core/QueryManager.js.map +1 -1
- package/invariantErrorCodes.js +39 -33
- package/link/error/index.d.ts +1 -1
- package/link/error/index.js +1 -1
- package/link/error/index.js.map +1 -1
- package/link/http/parseAndCheckHttpResponse.js +1 -1
- package/link/http/parseAndCheckHttpResponse.js.map +1 -1
- package/package.json +1 -1
- package/react/hooks/useLazyQuery.js +2 -1
- package/react/hooks/useLazyQuery.js.map +1 -1
- package/react/hooks/useQuery.js +8 -5
- package/react/hooks/useQuery.js.map +1 -1
- package/react/hooks/useSuspenseQuery.js +2 -0
- package/react/hooks/useSuspenseQuery.js.map +1 -1
- package/react/hooks-compiled/useLazyQuery.js +2 -1
- package/react/hooks-compiled/useLazyQuery.js.map +1 -1
- package/react/hooks-compiled/useQuery.js +9 -5
- package/react/hooks-compiled/useQuery.js.map +1 -1
- package/react/hooks-compiled/useSuspenseQuery.js +3 -1
- package/react/hooks-compiled/useSuspenseQuery.js.map +1 -1
- package/utilities/internal/checkDocument.js +2 -4
- package/utilities/internal/checkDocument.js.map +1 -1
- package/utilities/internal/constants.d.ts +18 -0
- package/utilities/internal/constants.js +18 -0
- package/utilities/internal/constants.js.map +1 -0
- package/utilities/internal/index.d.ts +2 -0
- package/utilities/internal/index.js +2 -0
- package/utilities/internal/index.js.map +1 -1
- package/utilities/internal/mapObservableFragment.d.ts +3 -0
- package/utilities/internal/mapObservableFragment.js +24 -0
- package/utilities/internal/mapObservableFragment.js.map +1 -0
- package/utilities/internal/memoize.d.ts +8 -0
- package/utilities/internal/memoize.js +28 -0
- package/utilities/internal/memoize.js.map +1 -0
- package/version.js +1 -1
|
@@ -62,6 +62,8 @@ export { toQueryResult } from "./toQueryResult.cjs";
|
|
|
62
62
|
export { filterMap } from "./filterMap.cjs";
|
|
63
63
|
export { equalByQuery } from "./equalByQuery.cjs";
|
|
64
64
|
export { canonicalStringify } from "./canonicalStringify.cjs";
|
|
65
|
+
export { mapObservableFragmentMemoized } from "./mapObservableFragment.cjs";
|
|
66
|
+
export { extensionsSymbol, variablesUnknownSymbol } from "./constants.cjs";
|
|
65
67
|
export { getApolloCacheMemoryInternals, getApolloClientMemoryInternals, getInMemoryCacheMemoryInternals, registerGlobalCache, } from "../internal/getMemoryInternals.cjs";
|
|
66
68
|
export { AutoCleanedStrongCache, AutoCleanedWeakCache } from "./caches.cjs";
|
|
67
69
|
export type { ApplyHKT } from "./types/ApplyHKT.cjs";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mapObservableFragmentMemoized = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const memoize_js_1 = require("./memoize.cjs");
|
|
6
|
+
function mapObservableFragment(observable, mapFn) {
|
|
7
|
+
let currentResult;
|
|
8
|
+
let stableMappedResult;
|
|
9
|
+
function toMapped(result) {
|
|
10
|
+
if (result !== currentResult) {
|
|
11
|
+
currentResult = result;
|
|
12
|
+
stableMappedResult = mapFn(currentResult);
|
|
13
|
+
}
|
|
14
|
+
return stableMappedResult;
|
|
15
|
+
}
|
|
16
|
+
return Object.assign(observable.pipe((0, rxjs_1.map)(toMapped), (0, rxjs_1.shareReplay)({ bufferSize: 1, refCount: true })), {
|
|
17
|
+
getCurrentResult: () => toMapped(observable.getCurrentResult()),
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
exports.mapObservableFragmentMemoized = (0, memoize_js_1.memoize)(function mapObservableFragmentMemoized(observable,
|
|
21
|
+
/**
|
|
22
|
+
* used together with `observable` as memoization key, `mapFn` is explicitly not used as memoization key
|
|
23
|
+
*/
|
|
24
|
+
_cacheKey, mapFn) {
|
|
25
|
+
return mapObservableFragment(observable, mapFn);
|
|
26
|
+
}, { max: 1, makeCacheKey: (args) => args.slice(0, 2) });
|
|
27
|
+
//# sourceMappingURL=mapObservableFragment.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapObservableFragment.cjs","sources":["../../../../src/utilities/internal/mapObservableFragment.ts"],"sourcesContent":["import { map, shareReplay } from \"rxjs\";\n\nimport type { ApolloCache } from \"@apollo/client\";\n\nimport { memoize } from \"./memoize.js\";\n\nfunction mapObservableFragment<From, To>(\n observable: ApolloCache.ObservableFragment<From>,\n mapFn: (\n from: ApolloCache.WatchFragmentResult<From>\n ) => ApolloCache.WatchFragmentResult<To>\n): ApolloCache.ObservableFragment<To> {\n let currentResult: ApolloCache.WatchFragmentResult<From>;\n let stableMappedResult: ApolloCache.WatchFragmentResult<To>;\n\n function toMapped(\n result: ApolloCache.WatchFragmentResult<From>\n ): ApolloCache.WatchFragmentResult<To> {\n if (result !== currentResult) {\n currentResult = result;\n stableMappedResult = mapFn(currentResult);\n }\n return stableMappedResult;\n }\n\n return Object.assign(\n observable.pipe(\n map(toMapped),\n shareReplay({ bufferSize: 1, refCount: true })\n ),\n {\n getCurrentResult: () => toMapped(observable.getCurrentResult()),\n }\n );\n}\n\nexport const mapObservableFragmentMemoized = memoize(\n function mapObservableFragmentMemoized<From, To>(\n observable: ApolloCache.ObservableFragment<From>,\n /**\n * used together with `observable` as memoization key, `mapFn` is explicitly not used as memoization key\n */\n _cacheKey: symbol,\n mapFn: (\n from: ApolloCache.WatchFragmentResult<From>\n ) => ApolloCache.WatchFragmentResult<To>\n ): ApolloCache.ObservableFragment<To> {\n return mapObservableFragment(observable, mapFn);\n },\n { max: 1, makeCacheKey: (args) => args.slice(0, 2) }\n);\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { ApolloCache } from "@apollo/client";
|
|
2
|
+
export declare const mapObservableFragmentMemoized: <From, To>(observable: ApolloCache.ObservableFragment<From>, _cacheKey: symbol, mapFn: (from: ApolloCache.WatchFragmentResult<From>) => ApolloCache.WatchFragmentResult<To>) => ApolloCache.ObservableFragment<To>;
|
|
3
|
+
//# sourceMappingURL=mapObservableFragment.d.cts.map
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memoize = memoize;
|
|
4
|
+
const trie_1 = require("@wry/trie");
|
|
5
|
+
const caches_js_1 = require("./caches.cjs");
|
|
6
|
+
/**
|
|
7
|
+
* Naive alternative to `wrap` without any dependency tracking, potentially avoiding resulting memory leaks.
|
|
8
|
+
*/
|
|
9
|
+
function memoize(fn, { max, makeCacheKey = (args) => args, }) {
|
|
10
|
+
const keys = new trie_1.Trie(true);
|
|
11
|
+
const cache = new caches_js_1.AutoCleanedWeakCache(max);
|
|
12
|
+
return (...args) => {
|
|
13
|
+
const cacheKey = keys.lookupArray(makeCacheKey(args));
|
|
14
|
+
const cached = cache.get(cacheKey);
|
|
15
|
+
if (cached) {
|
|
16
|
+
if (cached.error) {
|
|
17
|
+
throw cached.error;
|
|
18
|
+
}
|
|
19
|
+
return cached.result;
|
|
20
|
+
}
|
|
21
|
+
const entry = cache.set(cacheKey, {});
|
|
22
|
+
try {
|
|
23
|
+
return (entry.result = fn(...args));
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
entry.error = error;
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=memoize.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memoize.cjs","sources":["../../../../src/utilities/internal/memoize.ts"],"sourcesContent":["import { Trie } from \"@wry/trie\";\n\nimport { AutoCleanedWeakCache } from \"./caches.js\";\n\n/**\n * Naive alternative to `wrap` without any dependency tracking, potentially avoiding resulting memory leaks.\n */\nexport function memoize<TArgs extends any[], TResult>(\n fn: (...args: TArgs) => TResult,\n {\n max,\n makeCacheKey = (args) => args,\n }: { max: number; makeCacheKey?: (args: TArgs) => [...any[]] }\n): (...args: TArgs) => TResult {\n const keys = new Trie<{}>(true);\n const cache = new AutoCleanedWeakCache<\n {},\n { result?: TResult; error?: unknown }\n >(max);\n\n return (...args: TArgs): TResult => {\n const cacheKey = keys.lookupArray(makeCacheKey(args));\n const cached = cache.get(cacheKey);\n if (cached) {\n if (cached.error) {\n throw cached.error;\n }\n return cached.result!;\n }\n\n const entry = cache.set(cacheKey, {});\n try {\n return (entry.result = fn(...args));\n } catch (error) {\n entry.error = error;\n throw error;\n }\n };\n}\n"],"names":[],"mappings":";;AAOA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAPA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,eAAA,CAAA;AAEA,CAAA,CAAA;;CAEA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,CAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB,CACrB,CADF,CACiC,EAC/B,EACE,CAHJ,CAAA,CAGO,EACH,CAJJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAImB,CAAC,CAJpB,CAAA,CAAA,CAIwB,EAAE,CAJ1B,EAI6B,CAJ7B,CAAA,CAAA,CAIiC,EAJjC,CAKgE,EALhE;IAOE,CAAF,CAAA,CAAA,CAAA,EAAQ,CAAR,CAAA,CAAA,EAAA,EAAe,CAAf,CAAA,EAAmB,CAAnB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAuB,CAAK,CAA5B,CAAA,CAAA,CAAgC,CAAC;IAC/B,CAAF,CAAA,CAAA,CAAA,EAAQ,CAAR,CAAA,CAAA,CAAA,EAAA,EAAgB,CAAhB,CAAA,EAAoB,CAApB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwC,CAGpC,CAHJ,CAAA,CAGO,CAAC;IAEN,CAAF,CAAA,CAAA,CAAA,CAAA,EAAS,CAAC,CAAV,CAAA,CAAa,CAAb,CAAA,CAAA,CAAwB,EAAW,CAAnC,EAAA;QACI,CAAJ,CAAA,CAAA,CAAA,EAAU,CAAV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAqB,CAArB,CAAA,CAAA,CAAyB,CAAC,CAA1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqC,CAAC,CAAtC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkD,CAAC,CAAnD,CAAA,CAAA,CAAuD,CAAC,CAAC;QACrD,CAAJ,CAAA,CAAA,CAAA,EAAU,CAAV,CAAA,CAAA,CAAA,CAAA,EAAA,EAAmB,CAAnB,CAAA,CAAA,CAAA,CAAwB,CAAC,CAAzB,CAAA,CAA4B,CAAC,CAA7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqC,CAAC;QAClC,CAAJ,EAAA,CAAQ,CAAR,CAAA,CAAA,CAAA,CAAA,CAAc,EAAE;YACV,CAAN,EAAA,CAAU,CAAV,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,CAAjB,CAAA,CAAA,CAAA,CAAsB,EAAE;gBAChB,CAAR,CAAA,CAAA,CAAA,EAAc,CAAd,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAC,CAArB,CAAA,CAAA,CAAA,CAA0B;YACpB;YACA,CAAN,CAAA,CAAA,CAAA,CAAA,EAAa,CAAb,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,CAApB,CAAA,CAAA,CAAA,CAAA,CAA2B;QACvB;QAEA,CAAJ,CAAA,CAAA,CAAA,EAAU,CAAV,CAAA,CAAA,CAAA,EAAA,EAAkB,CAAlB,CAAA,CAAA,CAAA,CAAuB,CAAC,CAAxB,CAAA,CAA2B,CAAC,CAA5B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoC,EAAE,CAAtC,CAAwC,CAAC;QACrC,CAAJ,CAAA,EAAQ;YACF,CAAN,CAAA,CAAA,CAAA,CAAA,EAAa,CAAC,CAAd,CAAA,CAAA,CAAA,CAAmB,CAAC,CAApB,CAAA,CAAA,CAAA,CAAA,EAAA,EAA6B,CAA7B,CAA+B,CAAC,CAAhC,CAAA,CAAmC,CAAnC,CAAA,CAAA,CAAuC,CAAC,CAAC;QACrC;QAAE,CAAN,CAAA,CAAA,CAAA,EAAA,CAAa,CAAb,CAAA,CAAA,CAAA,CAAkB,EAAE;YACd,CAAN,CAAA,CAAA,CAAA,CAAW,CAAC,CAAZ,CAAA,CAAA,CAAA,EAAA,EAAoB,CAApB,CAAA,CAAA,CAAA,CAAyB;YACnB,CAAN,CAAA,CAAA,CAAA,EAAY,CAAZ,CAAA,CAAA,CAAA,CAAiB;QACb;IACF,CAAC;AACH;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Naive alternative to `wrap` without any dependency tracking, potentially avoiding resulting memory leaks.
|
|
3
|
+
*/
|
|
4
|
+
export declare function memoize<TArgs extends any[], TResult>(fn: (...args: TArgs) => TResult, { max, makeCacheKey, }: {
|
|
5
|
+
max: number;
|
|
6
|
+
makeCacheKey?: (args: TArgs) => [...any[]];
|
|
7
|
+
}): (...args: TArgs) => TResult;
|
|
8
|
+
//# sourceMappingURL=memoize.d.cts.map
|
package/__cjs/version.cjs
CHANGED
package/cache/core/cache.d.ts
CHANGED
|
@@ -159,6 +159,53 @@ export declare abstract class ApolloCache {
|
|
|
159
159
|
* same as returning `false`.
|
|
160
160
|
*/
|
|
161
161
|
resolvesClientField?(typename: string, fieldName: string): boolean;
|
|
162
|
+
/**
|
|
163
|
+
* Executes multiple cache operations as a single batch, ensuring that
|
|
164
|
+
* watchers are only notified once after all operations complete. This is
|
|
165
|
+
* useful for improving performance when making multiple cache updates, as it
|
|
166
|
+
* prevents unnecessary re-renders or query refetches between individual
|
|
167
|
+
* operations.
|
|
168
|
+
*
|
|
169
|
+
* The `batch` method supports both optimistic and non-optimistic updates, and
|
|
170
|
+
* provides fine-grained control over which cache layer receives the updates
|
|
171
|
+
* and when watchers are notified.
|
|
172
|
+
*
|
|
173
|
+
* For usage instructions, see [Interacting with cached data: `cache.batch`](https://www.apollographql.com/docs/react/caching/cache-interaction#using-cachebatch).
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
*
|
|
177
|
+
* ```js
|
|
178
|
+
* cache.batch({
|
|
179
|
+
* update(cache) {
|
|
180
|
+
* cache.writeQuery({
|
|
181
|
+
* query: GET_TODOS,
|
|
182
|
+
* data: { todos: updatedTodos },
|
|
183
|
+
* });
|
|
184
|
+
* cache.evict({ id: "Todo:123" });
|
|
185
|
+
* },
|
|
186
|
+
* });
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* @example
|
|
190
|
+
*
|
|
191
|
+
* ```js
|
|
192
|
+
* // Optimistic update with a custom layer ID
|
|
193
|
+
* cache.batch({
|
|
194
|
+
* optimistic: "add-todo-optimistic",
|
|
195
|
+
* update(cache) {
|
|
196
|
+
* cache.modify({
|
|
197
|
+
* fields: {
|
|
198
|
+
* todos(existing = []) {
|
|
199
|
+
* return [...existing, newTodoRef];
|
|
200
|
+
* },
|
|
201
|
+
* },
|
|
202
|
+
* });
|
|
203
|
+
* },
|
|
204
|
+
* });
|
|
205
|
+
* ```
|
|
206
|
+
*
|
|
207
|
+
* @returns The return value of the `update` function.
|
|
208
|
+
*/
|
|
162
209
|
batch<U>(options: Cache.BatchOptions<this, U>): U;
|
|
163
210
|
abstract performTransaction(transaction: Transaction, optimisticId?: string | null): void;
|
|
164
211
|
recordOptimisticTransaction(transaction: Transaction, optimisticId: string): void;
|
package/cache/core/cache.js
CHANGED
|
@@ -5,7 +5,7 @@ import { wrap } from "optimism";
|
|
|
5
5
|
import { distinctUntilChanged, map, Observable, ReplaySubject, share, shareReplay, tap, timer, } from "rxjs";
|
|
6
6
|
import { cacheSizes, canonicalStringify } from "@apollo/client/utilities";
|
|
7
7
|
import { __DEV__ } from "@apollo/client/utilities/environment";
|
|
8
|
-
import { combineLatestBatched, equalByQuery, getApolloCacheMemoryInternals, getFragmentDefinition, getFragmentQueryDocument, } from "@apollo/client/utilities/internal";
|
|
8
|
+
import { combineLatestBatched, equalByQuery, getApolloCacheMemoryInternals, getFragmentDefinition, getFragmentQueryDocument, mapObservableFragmentMemoized, } from "@apollo/client/utilities/internal";
|
|
9
9
|
import { invariant } from "@apollo/client/utilities/invariant";
|
|
10
10
|
export class ApolloCache {
|
|
11
11
|
assumeImmutableResults = false;
|
|
@@ -16,11 +16,53 @@ export class ApolloCache {
|
|
|
16
16
|
return null;
|
|
17
17
|
}
|
|
18
18
|
// Transactional API
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Executes multiple cache operations as a single batch, ensuring that
|
|
21
|
+
* watchers are only notified once after all operations complete. This is
|
|
22
|
+
* useful for improving performance when making multiple cache updates, as it
|
|
23
|
+
* prevents unnecessary re-renders or query refetches between individual
|
|
24
|
+
* operations.
|
|
25
|
+
*
|
|
26
|
+
* The `batch` method supports both optimistic and non-optimistic updates, and
|
|
27
|
+
* provides fine-grained control over which cache layer receives the updates
|
|
28
|
+
* and when watchers are notified.
|
|
29
|
+
*
|
|
30
|
+
* For usage instructions, see [Interacting with cached data: `cache.batch`](https://www.apollographql.com/docs/react/caching/cache-interaction#using-cachebatch).
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
*
|
|
34
|
+
* ```js
|
|
35
|
+
* cache.batch({
|
|
36
|
+
* update(cache) {
|
|
37
|
+
* cache.writeQuery({
|
|
38
|
+
* query: GET_TODOS,
|
|
39
|
+
* data: { todos: updatedTodos },
|
|
40
|
+
* });
|
|
41
|
+
* cache.evict({ id: "Todo:123" });
|
|
42
|
+
* },
|
|
43
|
+
* });
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
*
|
|
48
|
+
* ```js
|
|
49
|
+
* // Optimistic update with a custom layer ID
|
|
50
|
+
* cache.batch({
|
|
51
|
+
* optimistic: "add-todo-optimistic",
|
|
52
|
+
* update(cache) {
|
|
53
|
+
* cache.modify({
|
|
54
|
+
* fields: {
|
|
55
|
+
* todos(existing = []) {
|
|
56
|
+
* return [...existing, newTodoRef];
|
|
57
|
+
* },
|
|
58
|
+
* },
|
|
59
|
+
* });
|
|
60
|
+
* },
|
|
61
|
+
* });
|
|
62
|
+
* ```
|
|
63
|
+
*
|
|
64
|
+
* @returns The return value of the `update` function.
|
|
65
|
+
*/
|
|
24
66
|
batch(options) {
|
|
25
67
|
const optimisticId = typeof options.optimistic === "string" ? options.optimistic
|
|
26
68
|
: options.optimistic === false ? null
|
|
@@ -79,7 +121,6 @@ export class ApolloCache {
|
|
|
79
121
|
watchFragment(options) {
|
|
80
122
|
const { fragment, fragmentName, from } = options;
|
|
81
123
|
const query = this.getFragmentDoc(fragment, fragmentName);
|
|
82
|
-
const transformData = options[Symbol.for("apollo.transformData")] ?? ((data) => data);
|
|
83
124
|
const fromArray = Array.isArray(from) ? from : [from];
|
|
84
125
|
const ids = fromArray.map((value) => {
|
|
85
126
|
// While our TypeScript types do not allow for `undefined` as a valid
|
|
@@ -92,26 +133,26 @@ export class ApolloCache {
|
|
|
92
133
|
if (__DEV__) {
|
|
93
134
|
const actualFragmentName = fragmentName || getFragmentDefinition(fragment).name.value;
|
|
94
135
|
if (id === undefined) {
|
|
95
|
-
__DEV__ && invariant.warn(
|
|
136
|
+
__DEV__ && invariant.warn(113, actualFragmentName);
|
|
96
137
|
}
|
|
97
138
|
}
|
|
98
139
|
return id;
|
|
99
140
|
});
|
|
100
141
|
if (!Array.isArray(from)) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
});
|
|
142
|
+
const observable = this.watchSingleFragment(ids[0], query, options);
|
|
143
|
+
// Unfortunately we forgot to allow for `null` on watchFragment in 4.0
|
|
144
|
+
// when `from` is a single record. As such, we need to fallback to {}
|
|
145
|
+
// when diff.result is null to maintain backwards compatibility. We
|
|
146
|
+
// should plan to change this in v5. We do however support `null` if
|
|
147
|
+
// `from` is explicitly `null`.
|
|
148
|
+
//
|
|
149
|
+
// NOTE: Using `from` with an array will maintain `null` properly
|
|
150
|
+
// without the need for a similar fallback since watchFragment with
|
|
151
|
+
// arrays is new functionality in v4.1.
|
|
152
|
+
return from === null ? observable : (mapObservableFragmentMemoized(observable, Symbol.for("apollo.transform.individualResult"), (result) => ({
|
|
153
|
+
...result,
|
|
154
|
+
data: result.data ?? {},
|
|
155
|
+
})));
|
|
115
156
|
}
|
|
116
157
|
let currentResult;
|
|
117
158
|
function toResult(results) {
|
|
@@ -129,7 +170,6 @@ export class ApolloCache {
|
|
|
129
170
|
dataState: "complete",
|
|
130
171
|
complete: true,
|
|
131
172
|
});
|
|
132
|
-
result.data = transformData(result.data);
|
|
133
173
|
if (!equal(currentResult, result)) {
|
|
134
174
|
currentResult = result;
|
|
135
175
|
}
|
|
@@ -164,7 +204,7 @@ export class ApolloCache {
|
|
|
164
204
|
if (id === null) {
|
|
165
205
|
return nullObservable;
|
|
166
206
|
}
|
|
167
|
-
const { optimistic = true, variables
|
|
207
|
+
const { optimistic = true, variables } = options;
|
|
168
208
|
const cacheKey = [
|
|
169
209
|
fragmentQuery,
|
|
170
210
|
canonicalStringify({ id, optimistic, variables }),
|
|
@@ -174,7 +214,7 @@ export class ApolloCache {
|
|
|
174
214
|
let subscribed = false;
|
|
175
215
|
let currentResult;
|
|
176
216
|
function getNewestResult(diff) {
|
|
177
|
-
const data =
|
|
217
|
+
const data = diff.result;
|
|
178
218
|
if (!currentResult ||
|
|
179
219
|
!equalByQuery(fragmentQuery, { data: currentResult.data }, { data }, options.variables)) {
|
|
180
220
|
currentResult = {
|