@isograph/react 0.5.0 → 0.5.1
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/.turbo/turbo-compile-libs.log +9 -2
- package/dist/_virtual/rolldown_runtime.js +25 -0
- package/dist/core/FragmentReference.d.mts +38 -0
- package/dist/core/FragmentReference.d.mts.map +1 -0
- package/dist/core/FragmentReference.d.ts +31 -29
- package/dist/core/FragmentReference.d.ts.map +1 -1
- package/dist/core/FragmentReference.js +7 -5
- package/dist/core/FragmentReference.mjs +10 -0
- package/dist/core/FragmentReference.mjs.map +1 -0
- package/dist/core/IsographEnvironment.d.mts +89 -0
- package/dist/core/IsographEnvironment.d.mts.map +1 -0
- package/dist/core/IsographEnvironment.d.ts +76 -79
- package/dist/core/IsographEnvironment.d.ts.map +1 -1
- package/dist/core/IsographEnvironment.js +60 -82
- package/dist/core/IsographEnvironment.mjs +67 -0
- package/dist/core/IsographEnvironment.mjs.map +1 -0
- package/dist/core/PromiseWrapper.d.mts +36 -0
- package/dist/core/PromiseWrapper.d.mts.map +1 -0
- package/dist/core/PromiseWrapper.d.ts +26 -23
- package/dist/core/PromiseWrapper.d.ts.map +1 -1
- package/dist/core/PromiseWrapper.js +45 -43
- package/dist/core/PromiseWrapper.mjs +49 -0
- package/dist/core/PromiseWrapper.mjs.map +1 -0
- package/dist/core/areEqualWithDeepComparison.js +56 -108
- package/dist/core/areEqualWithDeepComparison.mjs +62 -0
- package/dist/core/areEqualWithDeepComparison.mjs.map +1 -0
- package/dist/core/brand.d.mts +19 -0
- package/dist/core/brand.d.mts.map +1 -0
- package/dist/core/brand.d.ts +6 -6
- package/dist/core/brand.d.ts.map +1 -1
- package/dist/core/cache.d.mts +20 -0
- package/dist/core/cache.d.mts.map +1 -0
- package/dist/core/cache.d.ts +18 -37
- package/dist/core/cache.d.ts.map +1 -1
- package/dist/core/cache.js +203 -537
- package/dist/core/cache.mjs +237 -0
- package/dist/core/cache.mjs.map +1 -0
- package/dist/core/check.d.mts +28 -0
- package/dist/core/check.d.mts.map +1 -0
- package/dist/core/check.d.ts +21 -19
- package/dist/core/check.d.ts.map +1 -1
- package/dist/core/check.js +80 -127
- package/dist/core/check.mjs +84 -0
- package/dist/core/check.mjs.map +1 -0
- package/dist/core/componentCache.js +9 -35
- package/dist/core/componentCache.mjs +12 -0
- package/dist/core/componentCache.mjs.map +1 -0
- package/dist/core/entrypoint.d.mts +99 -0
- package/dist/core/entrypoint.d.mts.map +1 -0
- package/dist/core/entrypoint.d.ts +83 -78
- package/dist/core/entrypoint.d.ts.map +1 -1
- package/dist/core/entrypoint.js +6 -5
- package/dist/core/entrypoint.mjs +8 -0
- package/dist/core/entrypoint.mjs.map +1 -0
- package/dist/core/garbageCollection.d.mts +18 -0
- package/dist/core/garbageCollection.d.mts.map +1 -0
- package/dist/core/garbageCollection.d.ts +15 -16
- package/dist/core/garbageCollection.d.ts.map +1 -1
- package/dist/core/garbageCollection.js +76 -115
- package/dist/core/garbageCollection.mjs +89 -0
- package/dist/core/garbageCollection.mjs.map +1 -0
- package/dist/core/getOrCreateCacheForArtifact.js +37 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs +38 -0
- package/dist/core/getOrCreateCacheForArtifact.mjs.map +1 -0
- package/dist/core/logging.d.mts +95 -0
- package/dist/core/logging.d.mts.map +1 -0
- package/dist/core/logging.d.ts +66 -61
- package/dist/core/logging.d.ts.map +1 -1
- package/dist/core/logging.js +17 -18
- package/dist/core/logging.mjs +20 -0
- package/dist/core/logging.mjs.map +1 -0
- package/dist/core/makeNetworkRequest.d.mts +13 -0
- package/dist/core/makeNetworkRequest.d.mts.map +1 -0
- package/dist/core/makeNetworkRequest.d.ts +12 -10
- package/dist/core/makeNetworkRequest.d.ts.map +1 -1
- package/dist/core/makeNetworkRequest.js +180 -264
- package/dist/core/makeNetworkRequest.mjs +195 -0
- package/dist/core/makeNetworkRequest.mjs.map +1 -0
- package/dist/core/optimisticProxy.d.mts +43 -0
- package/dist/core/optimisticProxy.d.mts.map +1 -0
- package/dist/core/optimisticProxy.d.ts +37 -53
- package/dist/core/optimisticProxy.d.ts.map +1 -1
- package/dist/core/optimisticProxy.js +245 -371
- package/dist/core/optimisticProxy.mjs +268 -0
- package/dist/core/optimisticProxy.mjs.map +1 -0
- package/dist/core/read.d.mts +29 -0
- package/dist/core/read.d.mts.map +1 -0
- package/dist/core/read.d.ts +23 -28
- package/dist/core/read.d.ts.map +1 -1
- package/dist/core/read.js +435 -650
- package/dist/core/read.mjs +456 -0
- package/dist/core/read.mjs.map +1 -0
- package/dist/core/reader.d.mts +89 -0
- package/dist/core/reader.d.mts.map +1 -0
- package/dist/core/reader.d.ts +78 -77
- package/dist/core/reader.d.ts.map +1 -1
- package/dist/core/startUpdate.js +115 -152
- package/dist/core/startUpdate.mjs +125 -0
- package/dist/core/startUpdate.mjs.map +1 -0
- package/dist/core/subscribe.d.mts +12 -0
- package/dist/core/subscribe.d.mts.map +1 -0
- package/dist/core/subscribe.d.ts +12 -0
- package/dist/core/subscribe.d.ts.map +1 -0
- package/dist/core/subscribe.js +79 -0
- package/dist/core/subscribe.mjs +79 -0
- package/dist/core/subscribe.mjs.map +1 -0
- package/dist/core/util.d.mts +27 -0
- package/dist/core/util.d.mts.map +1 -0
- package/dist/core/util.d.ts +21 -17
- package/dist/core/util.d.ts.map +1 -1
- package/dist/core/util.js +22 -2
- package/dist/core/util.mjs +21 -0
- package/dist/core/util.mjs.map +1 -0
- package/dist/core/writeData.d.mts +11 -0
- package/dist/core/writeData.d.mts.map +1 -0
- package/dist/core/writeData.d.ts +11 -0
- package/dist/core/writeData.d.ts.map +1 -0
- package/dist/core/writeData.js +41 -0
- package/dist/core/writeData.mjs +42 -0
- package/dist/core/writeData.mjs.map +1 -0
- package/dist/index.d.mts +32 -0
- package/dist/index.d.ts +32 -29
- package/dist/index.js +70 -69
- package/dist/index.mjs +31 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts +12 -0
- package/dist/loadable-hooks/useClientSideDefer.d.mts.map +1 -0
- package/dist/loadable-hooks/useClientSideDefer.d.ts +9 -12
- package/dist/loadable-hooks/useClientSideDefer.d.ts.map +1 -1
- package/dist/loadable-hooks/useClientSideDefer.js +13 -44
- package/dist/loadable-hooks/useClientSideDefer.mjs +14 -0
- package/dist/loadable-hooks/useClientSideDefer.mjs.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts +33 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts +26 -22
- package/dist/loadable-hooks/useConnectionSpecPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useConnectionSpecPagination.js +133 -172
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs +134 -0
- package/dist/loadable-hooks/useConnectionSpecPagination.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts +8 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts +6 -3
- package/dist/loadable-hooks/useImperativeExposedMutationField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeExposedMutationField.js +9 -12
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs +11 -0
- package/dist/loadable-hooks/useImperativeExposedMutationField.mjs.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts +19 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.mts.map +1 -0
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts +15 -11
- package/dist/loadable-hooks/useImperativeLoadableField.d.ts.map +1 -1
- package/dist/loadable-hooks/useImperativeLoadableField.js +16 -12
- package/dist/loadable-hooks/useImperativeLoadableField.mjs +17 -0
- package/dist/loadable-hooks/useImperativeLoadableField.mjs.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts +24 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.mts.map +1 -0
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts +19 -15
- package/dist/loadable-hooks/useSkipLimitPagination.d.ts.map +1 -1
- package/dist/loadable-hooks/useSkipLimitPagination.js +118 -160
- package/dist/loadable-hooks/useSkipLimitPagination.mjs +119 -0
- package/dist/loadable-hooks/useSkipLimitPagination.mjs.map +1 -0
- package/dist/react/FragmentReader.d.mts +18 -0
- package/dist/react/FragmentReader.d.mts.map +1 -0
- package/dist/react/FragmentReader.d.ts +16 -8
- package/dist/react/FragmentReader.d.ts.map +1 -1
- package/dist/react/FragmentReader.js +8 -7
- package/dist/react/FragmentReader.mjs +10 -0
- package/dist/react/FragmentReader.mjs.map +1 -0
- package/dist/react/FragmentRenderer.d.mts +20 -0
- package/dist/react/FragmentRenderer.d.mts.map +1 -0
- package/dist/react/FragmentRenderer.d.ts +18 -14
- package/dist/react/FragmentRenderer.d.ts.map +1 -1
- package/dist/react/FragmentRenderer.js +11 -33
- package/dist/react/FragmentRenderer.mjs +12 -0
- package/dist/react/FragmentRenderer.mjs.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.mts +17 -0
- package/dist/react/IsographEnvironmentProvider.d.mts.map +1 -0
- package/dist/react/IsographEnvironmentProvider.d.ts +15 -9
- package/dist/react/IsographEnvironmentProvider.d.ts.map +1 -1
- package/dist/react/IsographEnvironmentProvider.js +15 -39
- package/dist/react/IsographEnvironmentProvider.mjs +17 -0
- package/dist/react/IsographEnvironmentProvider.mjs.map +1 -0
- package/dist/react/LoadableFieldReader.d.mts +21 -0
- package/dist/react/LoadableFieldReader.d.mts.map +1 -0
- package/dist/react/LoadableFieldReader.d.ts +15 -12
- package/dist/react/LoadableFieldReader.d.ts.map +1 -1
- package/dist/react/LoadableFieldReader.js +13 -47
- package/dist/react/LoadableFieldReader.mjs +14 -0
- package/dist/react/LoadableFieldReader.mjs.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.mts +22 -0
- package/dist/react/LoadableFieldRenderer.d.mts.map +1 -0
- package/dist/react/LoadableFieldRenderer.d.ts +16 -13
- package/dist/react/LoadableFieldRenderer.d.ts.map +1 -1
- package/dist/react/LoadableFieldRenderer.js +13 -70
- package/dist/react/LoadableFieldRenderer.mjs +14 -0
- package/dist/react/LoadableFieldRenderer.mjs.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.mts.map +1 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts +11 -3
- package/dist/react/RenderAfterCommit__DO_NOT_USE.d.ts.map +1 -1
- package/dist/react/RenderAfterCommit__DO_NOT_USE.js +17 -13
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs +18 -0
- package/dist/react/RenderAfterCommit__DO_NOT_USE.mjs.map +1 -0
- package/dist/react/createIsographEnvironment.d.mts +9 -0
- package/dist/react/createIsographEnvironment.d.mts.map +1 -0
- package/dist/react/createIsographEnvironment.d.ts +8 -0
- package/dist/react/createIsographEnvironment.d.ts.map +1 -0
- package/dist/react/createIsographEnvironment.js +10 -0
- package/dist/react/createIsographEnvironment.mjs +11 -0
- package/dist/react/createIsographEnvironment.mjs.map +1 -0
- package/dist/react/maybeUnwrapNetworkRequest.js +11 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs +12 -0
- package/dist/react/maybeUnwrapNetworkRequest.mjs.map +1 -0
- package/dist/react/useImperativeReference.d.mts +15 -0
- package/dist/react/useImperativeReference.d.mts.map +1 -0
- package/dist/react/useImperativeReference.d.ts +13 -8
- package/dist/react/useImperativeReference.d.ts.map +1 -1
- package/dist/react/useImperativeReference.js +34 -30
- package/dist/react/useImperativeReference.mjs +35 -0
- package/dist/react/useImperativeReference.mjs.map +1 -0
- package/dist/react/useLazyReference.d.mts +13 -0
- package/dist/react/useLazyReference.d.mts.map +1 -0
- package/dist/react/useLazyReference.d.ts +11 -6
- package/dist/react/useLazyReference.d.ts.map +1 -1
- package/dist/react/useLazyReference.js +17 -40
- package/dist/react/useLazyReference.mjs +18 -0
- package/dist/react/useLazyReference.mjs.map +1 -0
- package/dist/react/useReadAndSubscribe.d.mts +20 -0
- package/dist/react/useReadAndSubscribe.d.mts.map +1 -0
- package/dist/react/useReadAndSubscribe.d.ts +14 -9
- package/dist/react/useReadAndSubscribe.d.ts.map +1 -1
- package/dist/react/useReadAndSubscribe.js +57 -37
- package/dist/react/useReadAndSubscribe.mjs +59 -0
- package/dist/react/useReadAndSubscribe.mjs.map +1 -0
- package/dist/react/useRerenderOnChange.d.mts +12 -0
- package/dist/react/useRerenderOnChange.d.mts.map +1 -0
- package/dist/react/useRerenderOnChange.d.ts +10 -6
- package/dist/react/useRerenderOnChange.d.ts.map +1 -1
- package/dist/react/useRerenderOnChange.js +16 -20
- package/dist/react/useRerenderOnChange.mjs +17 -0
- package/dist/react/useRerenderOnChange.mjs.map +1 -0
- package/dist/react/useResult.d.mts +8 -0
- package/dist/react/useResult.d.mts.map +1 -0
- package/dist/react/useResult.d.ts +7 -5
- package/dist/react/useResult.d.ts.map +1 -1
- package/dist/react/useResult.js +27 -40
- package/dist/react/useResult.mjs +30 -0
- package/dist/react/useResult.mjs.map +1 -0
- package/package.json +17 -9
- package/src/core/FragmentReference.ts +3 -3
- package/src/core/IsographEnvironment.ts +29 -16
- package/src/core/areEqualWithDeepComparison.ts +2 -18
- package/src/core/cache.ts +18 -383
- package/src/core/check.ts +9 -16
- package/src/core/componentCache.ts +10 -47
- package/src/core/entrypoint.ts +15 -3
- package/src/core/garbageCollection.ts +21 -10
- package/src/core/getOrCreateCacheForArtifact.ts +86 -0
- package/src/core/logging.ts +10 -10
- package/src/core/makeNetworkRequest.ts +16 -23
- package/src/core/optimisticProxy.ts +28 -47
- package/src/core/read.ts +21 -38
- package/src/core/reader.ts +8 -11
- package/src/core/startUpdate.ts +2 -6
- package/src/core/subscribe.ts +189 -0
- package/src/core/util.ts +26 -0
- package/src/core/writeData.ts +79 -0
- package/src/index.ts +5 -4
- package/src/loadable-hooks/useClientSideDefer.ts +4 -4
- package/src/loadable-hooks/useConnectionSpecPagination.ts +20 -18
- package/src/loadable-hooks/useImperativeLoadableField.ts +3 -3
- package/src/loadable-hooks/useSkipLimitPagination.ts +20 -18
- package/src/react/IsographEnvironmentProvider.tsx +2 -1
- package/src/react/LoadableFieldReader.tsx +2 -4
- package/src/react/LoadableFieldRenderer.tsx +2 -4
- package/src/react/createIsographEnvironment.ts +23 -0
- package/src/react/maybeUnwrapNetworkRequest.ts +17 -0
- package/src/react/useImperativeReference.ts +5 -4
- package/src/react/useLazyReference.ts +7 -8
- package/src/react/useReadAndSubscribe.ts +53 -5
- package/src/react/useRerenderOnChange.ts +3 -3
- package/src/react/useResult.ts +6 -24
- package/src/tests/__isograph/Economist/__link/output_type.ts +2 -0
- package/src/tests/garbageCollection.test.ts +3 -6
- package/src/tests/meNameSuccessor.ts +1 -1
- package/src/tests/nodeQuery.ts +2 -2
- package/src/tests/normalizeData.test.ts +5 -3
- package/src/tests/optimisticProxy.test.ts +7 -5
- package/src/tests/startUpdate.test.ts +5 -7
- package/vitest.config.ts +5 -0
- package/dist/core/areEqualWithDeepComparison.d.ts +0 -3
- package/dist/core/areEqualWithDeepComparison.d.ts.map +0 -1
- package/dist/core/brand.js +0 -2
- package/dist/core/componentCache.d.ts +0 -5
- package/dist/core/componentCache.d.ts.map +0 -1
- package/dist/core/reader.js +0 -2
- package/dist/core/startUpdate.d.ts +0 -9
- package/dist/core/startUpdate.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
|
@@ -1,399 +1,273 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.getMutableStoreRecordProxy = getMutableStoreRecordProxy;
|
|
6
|
-
exports.addNetworkResponseStoreLayer = addNetworkResponseStoreLayer;
|
|
7
|
-
exports.addStartUpdateStoreLayer = addStartUpdateStoreLayer;
|
|
8
|
-
exports.addOptimisticUpdaterStoreLayer = addOptimisticUpdaterStoreLayer;
|
|
9
|
-
exports.addOptimisticNetworkResponseStoreLayer = addOptimisticNetworkResponseStoreLayer;
|
|
10
|
-
exports.revertOptimisticStoreLayerAndMaybeReplace = revertOptimisticStoreLayerAndMaybeReplace;
|
|
11
|
-
const cache_1 = require("./cache");
|
|
1
|
+
const require_subscribe = require('./subscribe.js');
|
|
2
|
+
const require_cache = require('./cache.js');
|
|
3
|
+
|
|
4
|
+
//#region src/core/optimisticProxy.ts
|
|
12
5
|
function getOrInsertRecord(dataLayer, link) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const recordsById = ((_a = dataLayer[_c = link.__typename]) !== null && _a !== void 0 ? _a : (dataLayer[_c] = {}));
|
|
16
|
-
return ((_b = recordsById[_d = link.__link]) !== null && _b !== void 0 ? _b : (recordsById[_d] = {}));
|
|
6
|
+
const recordsById = dataLayer[link.__typename] ??= {};
|
|
7
|
+
return recordsById[link.__link] ??= {};
|
|
17
8
|
}
|
|
18
9
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
10
|
+
* Given the child-most store layer (i.e. environment.store) and a link (identifying a
|
|
11
|
+
* store record), create a proxy object that attempts to read through each successive
|
|
12
|
+
* store layer until a value (i.e. field name) is found. If found, return that value.
|
|
13
|
+
*/
|
|
23
14
|
function getStoreRecordProxy(storeLayer, link) {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
startNode = startNode.parentStoreLayer;
|
|
35
|
-
}
|
|
36
|
-
return undefined;
|
|
15
|
+
let startNode = storeLayer;
|
|
16
|
+
while (startNode != null) {
|
|
17
|
+
const storeRecord = startNode.data[link.__typename]?.[link.__link];
|
|
18
|
+
if (storeRecord === void 0) {
|
|
19
|
+
startNode = startNode.parentStoreLayer;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
if (storeRecord == null) return null;
|
|
23
|
+
return getMutableStoreRecordProxy(startNode, link);
|
|
24
|
+
}
|
|
37
25
|
}
|
|
38
26
|
function getMutableStoreRecordProxy(childMostStoreLayer, link) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
currentStoreLayer = currentStoreLayer.parentStoreLayer;
|
|
72
|
-
}
|
|
73
|
-
return false;
|
|
74
|
-
},
|
|
75
|
-
set(_, p, newValue) {
|
|
76
|
-
return Reflect.set(getOrInsertRecord(childMostStoreLayer.data, link), p, newValue);
|
|
77
|
-
},
|
|
78
|
-
});
|
|
27
|
+
return new Proxy({}, {
|
|
28
|
+
get(_, propertyName) {
|
|
29
|
+
let currentStoreLayer = childMostStoreLayer;
|
|
30
|
+
while (currentStoreLayer != null) {
|
|
31
|
+
const storeRecord = currentStoreLayer.data[link.__typename]?.[link.__link];
|
|
32
|
+
if (storeRecord !== void 0) {
|
|
33
|
+
if (storeRecord == null) return;
|
|
34
|
+
const value = Reflect.get(storeRecord, propertyName);
|
|
35
|
+
if (value !== void 0) return value;
|
|
36
|
+
}
|
|
37
|
+
currentStoreLayer = currentStoreLayer.parentStoreLayer;
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
has(_, propertyName) {
|
|
41
|
+
let currentStoreLayer = childMostStoreLayer;
|
|
42
|
+
while (currentStoreLayer != null) {
|
|
43
|
+
const storeRecord = currentStoreLayer.data[link.__typename]?.[link.__link];
|
|
44
|
+
if (storeRecord !== void 0) {
|
|
45
|
+
if (storeRecord == null) return false;
|
|
46
|
+
if (Reflect.has(storeRecord, propertyName)) return true;
|
|
47
|
+
}
|
|
48
|
+
currentStoreLayer = currentStoreLayer.parentStoreLayer;
|
|
49
|
+
}
|
|
50
|
+
return false;
|
|
51
|
+
},
|
|
52
|
+
set(_, p, newValue) {
|
|
53
|
+
return Reflect.set(getOrInsertRecord(childMostStoreLayer.data, link), p, newValue);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
79
56
|
}
|
|
80
57
|
function addNetworkResponseStoreLayer(parent) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
default: {
|
|
99
|
-
parent;
|
|
100
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
101
|
-
}
|
|
102
|
-
}
|
|
58
|
+
switch (parent.kind) {
|
|
59
|
+
case "NetworkResponseStoreLayer":
|
|
60
|
+
case "BaseStoreLayer": return parent;
|
|
61
|
+
case "StartUpdateStoreLayer":
|
|
62
|
+
case "OptimisticNetworkResponseStoreLayer":
|
|
63
|
+
case "OptimisticUpdaterStoreLayer": {
|
|
64
|
+
const node = {
|
|
65
|
+
kind: "NetworkResponseStoreLayer",
|
|
66
|
+
parentStoreLayer: parent,
|
|
67
|
+
childStoreLayer: null,
|
|
68
|
+
data: {}
|
|
69
|
+
};
|
|
70
|
+
parent.childStoreLayer = node;
|
|
71
|
+
return node;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
103
74
|
}
|
|
104
75
|
function mergeDataLayer(target, source) {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
76
|
+
for (const [typeName, sourceById] of Object.entries(source)) {
|
|
77
|
+
if (sourceById == null) {
|
|
78
|
+
target[typeName] = sourceById;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
const targetRecordById = target[typeName] ??= {};
|
|
82
|
+
for (const [id, sourceRecord] of Object.entries(sourceById)) {
|
|
83
|
+
if (sourceRecord == null) {
|
|
84
|
+
targetRecordById[id] = null;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const targetRecord = targetRecordById[id] ??= {};
|
|
88
|
+
Object.assign(targetRecord, sourceRecord);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
121
91
|
}
|
|
122
92
|
function addStartUpdateStoreLayer(parent, startUpdate) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
default: {
|
|
153
|
-
parent;
|
|
154
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
function addOptimisticUpdaterStoreLayer(parent, startUpdate) {
|
|
159
|
-
switch (parent.kind) {
|
|
160
|
-
case 'BaseStoreLayer':
|
|
161
|
-
case 'StartUpdateStoreLayer':
|
|
162
|
-
case 'NetworkResponseStoreLayer':
|
|
163
|
-
case 'OptimisticNetworkResponseStoreLayer':
|
|
164
|
-
case 'OptimisticUpdaterStoreLayer': {
|
|
165
|
-
const node = {
|
|
166
|
-
kind: 'OptimisticUpdaterStoreLayer',
|
|
167
|
-
parentStoreLayer: parent,
|
|
168
|
-
childStoreLayer: null,
|
|
169
|
-
data: {},
|
|
170
|
-
startUpdate: startUpdate,
|
|
171
|
-
};
|
|
172
|
-
startUpdate(node);
|
|
173
|
-
parent.childStoreLayer = node;
|
|
174
|
-
return node;
|
|
175
|
-
}
|
|
176
|
-
default: {
|
|
177
|
-
parent;
|
|
178
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
179
|
-
}
|
|
180
|
-
}
|
|
93
|
+
switch (parent.kind) {
|
|
94
|
+
case "BaseStoreLayer":
|
|
95
|
+
startUpdate(parent);
|
|
96
|
+
return parent;
|
|
97
|
+
case "StartUpdateStoreLayer": {
|
|
98
|
+
const node = parent;
|
|
99
|
+
const prevStartUpdate = node.startUpdate;
|
|
100
|
+
node.startUpdate = () => {
|
|
101
|
+
prevStartUpdate(node);
|
|
102
|
+
startUpdate(node);
|
|
103
|
+
};
|
|
104
|
+
startUpdate(node);
|
|
105
|
+
return node;
|
|
106
|
+
}
|
|
107
|
+
case "NetworkResponseStoreLayer":
|
|
108
|
+
case "OptimisticNetworkResponseStoreLayer":
|
|
109
|
+
case "OptimisticUpdaterStoreLayer": {
|
|
110
|
+
const node = {
|
|
111
|
+
kind: "StartUpdateStoreLayer",
|
|
112
|
+
parentStoreLayer: parent,
|
|
113
|
+
childStoreLayer: null,
|
|
114
|
+
data: {},
|
|
115
|
+
startUpdate
|
|
116
|
+
};
|
|
117
|
+
parent.childStoreLayer = node;
|
|
118
|
+
startUpdate(node);
|
|
119
|
+
return node;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
181
122
|
}
|
|
182
123
|
function addOptimisticNetworkResponseStoreLayer(parent) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
parent;
|
|
200
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
201
|
-
}
|
|
202
|
-
}
|
|
124
|
+
switch (parent.kind) {
|
|
125
|
+
case "BaseStoreLayer":
|
|
126
|
+
case "StartUpdateStoreLayer":
|
|
127
|
+
case "NetworkResponseStoreLayer":
|
|
128
|
+
case "OptimisticNetworkResponseStoreLayer":
|
|
129
|
+
case "OptimisticUpdaterStoreLayer": {
|
|
130
|
+
const node = {
|
|
131
|
+
kind: "OptimisticNetworkResponseStoreLayer",
|
|
132
|
+
parentStoreLayer: parent,
|
|
133
|
+
childStoreLayer: null,
|
|
134
|
+
data: {}
|
|
135
|
+
};
|
|
136
|
+
parent.childStoreLayer = node;
|
|
137
|
+
return node;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
203
140
|
}
|
|
204
141
|
/**
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
142
|
+
* Merge storeLayerToMerge, and its children, into baseStoreLayer.
|
|
143
|
+
* We can merge until we reach a revertible layer (i.e. an optimistic layer).
|
|
144
|
+
* All other layers cannot be reverted, so for housekeeping + perf, we merge
|
|
145
|
+
* them into a single layer.
|
|
146
|
+
*
|
|
147
|
+
* Note that BaseStoreLayer.childStoreLayer has type OptimisticStoreLayer | null.
|
|
148
|
+
* So, the state of the stack is never e.g. base <- network response. Instead,
|
|
149
|
+
* we have a base + a child that we would like to attach to the base. So, we merge
|
|
150
|
+
* (flatten) until we reach an optimistic layer or null, at which point, we can
|
|
151
|
+
* set baseStoreLayer.childStoreLayer = storeLayerToMerge (via setChildOfNode).
|
|
152
|
+
*/
|
|
216
153
|
function mergeLayersWithDataIntoBaseLayer(environment, storeLayerToMerge, baseStoreLayer) {
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
setChildOfNode(environment, baseStoreLayer, storeLayerToMerge);
|
|
154
|
+
while (storeLayerToMerge != null && storeLayerToMerge.kind !== "OptimisticUpdaterStoreLayer") {
|
|
155
|
+
mergeDataLayer(baseStoreLayer.data, storeLayerToMerge.data);
|
|
156
|
+
storeLayerToMerge = storeLayerToMerge.childStoreLayer;
|
|
157
|
+
}
|
|
158
|
+
setChildOfNode(environment, baseStoreLayer, storeLayerToMerge);
|
|
223
159
|
}
|
|
224
160
|
/**
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
function reexecuteUpdatesAndMergeData(storeLayer,
|
|
239
|
-
|
|
240
|
-
oldMergedData,
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
storeLayer.startUpdate(storeLayer);
|
|
257
|
-
break;
|
|
258
|
-
}
|
|
259
|
-
default: {
|
|
260
|
-
storeLayer;
|
|
261
|
-
throw new Error('Unreachable. This is a bug in Isograph.');
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
mergeDataLayer(newMergedData, storeLayer.data);
|
|
265
|
-
storeLayer = storeLayer.childStoreLayer;
|
|
266
|
-
}
|
|
161
|
+
* Now that we have replaced the optimistic layer with a network response layer, we need
|
|
162
|
+
* to
|
|
163
|
+
* - re-execute startUpdate and optimistic nodes, in light of the replaced data, and
|
|
164
|
+
* - create two objects containing the old merged data (from the optimistic update layer
|
|
165
|
+
* onward) and the new merged data (from the network response layer onward).
|
|
166
|
+
* - we will compare the new and old merged data in order to determine the changed records
|
|
167
|
+
* and trigger subscriptions.
|
|
168
|
+
*
|
|
169
|
+
* Here, "merged data" means all of the records + fields that were modified, starting at
|
|
170
|
+
* storeLayer, e.g. in BaseLayer <- OptimisticLayer <- StartUpdateLayer, if we
|
|
171
|
+
* are replacing Optimistic, then oldData will contain the records + fields modified by
|
|
172
|
+
* OptimisticLayer + StartUpdateLayer.
|
|
173
|
+
*/
|
|
174
|
+
function reexecuteUpdatesAndMergeData(storeLayer, oldMergedData, newMergedData) {
|
|
175
|
+
while (storeLayer != null) {
|
|
176
|
+
mergeDataLayer(oldMergedData, storeLayer.data);
|
|
177
|
+
switch (storeLayer.kind) {
|
|
178
|
+
case "OptimisticNetworkResponseStoreLayer":
|
|
179
|
+
case "NetworkResponseStoreLayer": break;
|
|
180
|
+
case "StartUpdateStoreLayer":
|
|
181
|
+
storeLayer.data = {};
|
|
182
|
+
storeLayer.startUpdate(storeLayer);
|
|
183
|
+
break;
|
|
184
|
+
case "OptimisticUpdaterStoreLayer":
|
|
185
|
+
storeLayer.data = {};
|
|
186
|
+
storeLayer.startUpdate(storeLayer);
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
mergeDataLayer(newMergedData, storeLayer.data);
|
|
190
|
+
storeLayer = storeLayer.childStoreLayer;
|
|
191
|
+
}
|
|
267
192
|
}
|
|
268
193
|
/**
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
194
|
+
* Set storeLayerToModify's child to a given layer. This may be null!
|
|
195
|
+
* If it is null, set the environment.store to storeLayerToModify.
|
|
196
|
+
* If it is not null, then the existing environment.store value remains
|
|
197
|
+
* valid.
|
|
198
|
+
*/
|
|
274
199
|
function setChildOfNode(environment, storeLayerToModify, newChildStoreLayer) {
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
environment.store = storeLayerToModify;
|
|
281
|
-
}
|
|
200
|
+
storeLayerToModify.childStoreLayer = newChildStoreLayer;
|
|
201
|
+
if (newChildStoreLayer != null) newChildStoreLayer.parentStoreLayer = storeLayerToModify;
|
|
202
|
+
else environment.store = storeLayerToModify;
|
|
282
203
|
}
|
|
283
204
|
/**
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
205
|
+
* Remove an optimistic store layer from the stack, potentially replacing it
|
|
206
|
+
* with a network response.
|
|
207
|
+
*
|
|
208
|
+
* After we do this, we must re-execute all child startUpdate and optimistic
|
|
209
|
+
* layers (since their data may have changed.) We also keep track of changed
|
|
210
|
+
* records, in order to call affected subscriptions.
|
|
211
|
+
*/
|
|
291
212
|
function revertOptimisticStoreLayerAndMaybeReplace(environment, optimisticNode, normalizeData) {
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
setChildOfNode(environment, networkResponseStoreLayer, childNode);
|
|
323
|
-
optimisticNode.childStoreLayer = networkResponseStoreLayer;
|
|
324
|
-
}
|
|
325
|
-
// (3) Re-execute all updates, accumulating all changed values into newMergedData.
|
|
326
|
-
// Since we have already written the network response into newMergedData, we
|
|
327
|
-
// can proceed from the child of the (potentially merged) network response layer.
|
|
328
|
-
//
|
|
329
|
-
// Note that it is important that reexecuteUpdatesAndMergeData is called here!
|
|
330
|
-
// That is because we created newMergedData from the network response layer's data,
|
|
331
|
-
// and later, we may merge that network response into the parent layer (if it is
|
|
332
|
-
// a base layer). That merged layer will contain many extraneous records (unless the
|
|
333
|
-
// base layer is empty).
|
|
334
|
-
//
|
|
335
|
-
// This would cause us to re-execute subscriptions unnecessarily, as these records
|
|
336
|
-
// do not represent changes between the optimistic and network response layers.
|
|
337
|
-
reexecuteUpdatesAndMergeData(childNode, oldMergedData, newMergedData);
|
|
338
|
-
// (4) Now, we can finally remove the optimistic layer, i.e. do
|
|
339
|
-
// optimistic.parent.child = optimistic.child.
|
|
340
|
-
// But the types don't line up, so we handle the cases differently, based on the
|
|
341
|
-
// parent layer type.
|
|
342
|
-
if (optimisticNode.parentStoreLayer.kind === 'BaseStoreLayer') {
|
|
343
|
-
// (4a) If the optimistic parent is the base layer, then we have a problem: base.child
|
|
344
|
-
// must be an optimistic layer or null. So, we merge the optimistic children into the
|
|
345
|
-
// base layer until we reach an optimistic layer.
|
|
346
|
-
mergeLayersWithDataIntoBaseLayer(environment, optimisticNode.childStoreLayer, optimisticNode.parentStoreLayer);
|
|
347
|
-
}
|
|
348
|
-
else if (optimisticNode.parentStoreLayer.kind === 'NetworkResponseStoreLayer' &&
|
|
349
|
-
((_a = optimisticNode.childStoreLayer) === null || _a === void 0 ? void 0 : _a.kind) === 'NetworkResponseStoreLayer') {
|
|
350
|
-
// (4b) if the parent is a network response layer, simply merge those. (We do not
|
|
351
|
-
// attempt to merge other layers, e.g. startUpdate layers, because there is some
|
|
352
|
-
// optimistic layer between this layer and the base, and the startUpdate will need
|
|
353
|
-
// to be recalculated if the optimistic layer is reverted.)
|
|
354
|
-
mergeDataLayer(optimisticNode.parentStoreLayer.data, optimisticNode.childStoreLayer.data);
|
|
355
|
-
setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer.childStoreLayer);
|
|
356
|
-
}
|
|
357
|
-
else {
|
|
358
|
-
// (4c) Otherwise, the parent is an optimistic or start update layer, and we can
|
|
359
|
-
// set optimistic.parent.child = optimistic.child.
|
|
360
|
-
setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer);
|
|
361
|
-
}
|
|
362
|
-
// (5) finally, compare the oldMergedData and newMergedData objects, in order to extract
|
|
363
|
-
// the modified IDs, and re-execute subscriptions.
|
|
364
|
-
let encounteredIds = new Map();
|
|
365
|
-
compareData(oldMergedData, newMergedData, encounteredIds);
|
|
366
|
-
(0, cache_1.callSubscriptions)(environment, encounteredIds);
|
|
213
|
+
const oldMergedData = optimisticNode.data;
|
|
214
|
+
optimisticNode.data = {};
|
|
215
|
+
let newMergedData = {};
|
|
216
|
+
let childNode = optimisticNode.childStoreLayer;
|
|
217
|
+
if (normalizeData != null) {
|
|
218
|
+
const networkResponseStoreLayer = {
|
|
219
|
+
kind: "NetworkResponseStoreLayer",
|
|
220
|
+
data: {},
|
|
221
|
+
parentStoreLayer: optimisticNode,
|
|
222
|
+
childStoreLayer: null
|
|
223
|
+
};
|
|
224
|
+
normalizeData(networkResponseStoreLayer);
|
|
225
|
+
if (childNode?.kind === "NetworkResponseStoreLayer") {
|
|
226
|
+
mergeDataLayer(networkResponseStoreLayer.data, childNode.data);
|
|
227
|
+
mergeDataLayer(oldMergedData, childNode.data);
|
|
228
|
+
childNode = childNode.childStoreLayer;
|
|
229
|
+
}
|
|
230
|
+
newMergedData = structuredClone(networkResponseStoreLayer.data);
|
|
231
|
+
setChildOfNode(environment, networkResponseStoreLayer, childNode);
|
|
232
|
+
optimisticNode.childStoreLayer = networkResponseStoreLayer;
|
|
233
|
+
}
|
|
234
|
+
reexecuteUpdatesAndMergeData(childNode, oldMergedData, newMergedData);
|
|
235
|
+
if (optimisticNode.parentStoreLayer.kind === "BaseStoreLayer") mergeLayersWithDataIntoBaseLayer(environment, optimisticNode.childStoreLayer, optimisticNode.parentStoreLayer);
|
|
236
|
+
else if (optimisticNode.parentStoreLayer.kind === "NetworkResponseStoreLayer" && optimisticNode.childStoreLayer?.kind === "NetworkResponseStoreLayer") {
|
|
237
|
+
mergeDataLayer(optimisticNode.parentStoreLayer.data, optimisticNode.childStoreLayer.data);
|
|
238
|
+
setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer.childStoreLayer);
|
|
239
|
+
} else setChildOfNode(environment, optimisticNode.parentStoreLayer, optimisticNode.childStoreLayer);
|
|
240
|
+
let encounteredIds = /* @__PURE__ */ new Map();
|
|
241
|
+
compareData(oldMergedData, newMergedData, encounteredIds);
|
|
242
|
+
require_subscribe.callSubscriptions(environment, encounteredIds);
|
|
367
243
|
}
|
|
368
244
|
function compareData(oldData, newData, encounteredIds) {
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
for (const [recordKey, newRecordValue] of Object.entries(newRecord)) {
|
|
389
|
-
// TODO: compare links, compare arrays
|
|
390
|
-
if (newRecordValue !== (oldRecord === null || oldRecord === void 0 ? void 0 : oldRecord[recordKey])) {
|
|
391
|
-
const set = (0, cache_1.insertEmptySetIfMissing)(encounteredIds, typeName);
|
|
392
|
-
set.add(id);
|
|
393
|
-
continue outer;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
(_a = encounteredIds.get(typeName)) === null || _a === void 0 ? void 0 : _a.delete(id);
|
|
397
|
-
}
|
|
398
|
-
}
|
|
245
|
+
const oldDataTypeNames = new Set(Object.keys(oldData));
|
|
246
|
+
const newDataTypeNames = new Set(Object.keys(newData));
|
|
247
|
+
for (const oldTypeName of oldDataTypeNames.difference(newDataTypeNames)) {
|
|
248
|
+
const set = require_cache.insertEmptySetIfMissing(encounteredIds, oldTypeName);
|
|
249
|
+
for (const id in oldData[oldTypeName]) set.add(id);
|
|
250
|
+
}
|
|
251
|
+
for (const [typeName, newRecords] of Object.entries(newData)) {
|
|
252
|
+
if (newRecords == null) continue;
|
|
253
|
+
const oldRecords = oldData[typeName];
|
|
254
|
+
outer: for (const [id, newRecord] of Object.entries(newRecords)) {
|
|
255
|
+
if (newRecord == null) continue;
|
|
256
|
+
const oldRecord = oldRecords?.[id];
|
|
257
|
+
for (const [recordKey, newRecordValue] of Object.entries(newRecord)) if (newRecordValue !== oldRecord?.[recordKey]) {
|
|
258
|
+
require_cache.insertEmptySetIfMissing(encounteredIds, typeName).add(id);
|
|
259
|
+
continue outer;
|
|
260
|
+
}
|
|
261
|
+
encounteredIds.get(typeName)?.delete(id);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
399
264
|
}
|
|
265
|
+
|
|
266
|
+
//#endregion
|
|
267
|
+
exports.addNetworkResponseStoreLayer = addNetworkResponseStoreLayer;
|
|
268
|
+
exports.addOptimisticNetworkResponseStoreLayer = addOptimisticNetworkResponseStoreLayer;
|
|
269
|
+
exports.addStartUpdateStoreLayer = addStartUpdateStoreLayer;
|
|
270
|
+
exports.getMutableStoreRecordProxy = getMutableStoreRecordProxy;
|
|
271
|
+
exports.getOrInsertRecord = getOrInsertRecord;
|
|
272
|
+
exports.getStoreRecordProxy = getStoreRecordProxy;
|
|
273
|
+
exports.revertOptimisticStoreLayerAndMaybeReplace = revertOptimisticStoreLayerAndMaybeReplace;
|