react-relay 14.1.0 → 16.0.0
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/ReactRelayContainerUtils.js.flow +1 -0
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +1 -0
- package/ReactRelayFragmentContainer.js.flow +6 -2
- package/ReactRelayFragmentMockRenderer.js.flow +1 -0
- package/ReactRelayLocalQueryRenderer.js.flow +5 -3
- package/ReactRelayPaginationContainer.js.flow +21 -12
- package/ReactRelayQueryFetcher.js.flow +20 -10
- package/ReactRelayQueryRenderer.js.flow +15 -11
- package/ReactRelayQueryRendererContext.js.flow +1 -0
- package/ReactRelayRefetchContainer.js.flow +9 -5
- package/ReactRelayTestMocker.js.flow +3 -1
- package/ReactRelayTypes.js.flow +2 -0
- package/RelayContext.js.flow +1 -0
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -1
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +1 -0
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModern-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -0
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +3 -1
- package/assertFragmentMap.js.flow +1 -0
- package/buildReactRelayContainer.js.flow +10 -6
- package/getRootVariablesForFragments.js.flow +1 -1
- package/hooks.js +1 -1
- package/hooks.js.flow +4 -0
- package/index.js +1 -1
- package/index.js.flow +4 -0
- package/isRelayEnvironment.js.flow +1 -0
- package/jest-react/enqueueTask.js.flow +1 -1
- package/jest-react/index.js.flow +1 -1
- package/jest-react/internalAct.js.flow +1 -1
- package/legacy.js +1 -1
- package/legacy.js.flow +1 -0
- package/lib/ReactRelayContainerUtils.js +0 -11
- package/lib/ReactRelayContext.js +1 -12
- package/lib/ReactRelayFragmentContainer.js +23 -122
- package/lib/ReactRelayFragmentMockRenderer.js +0 -12
- package/lib/ReactRelayLocalQueryRenderer.js +12 -41
- package/lib/ReactRelayPaginationContainer.js +45 -341
- package/lib/ReactRelayQueryFetcher.js +36 -111
- package/lib/ReactRelayQueryRenderer.js +29 -137
- package/lib/ReactRelayQueryRendererContext.js +0 -10
- package/lib/ReactRelayRefetchContainer.js +33 -166
- package/lib/ReactRelayTestMocker.js +18 -128
- package/lib/ReactRelayTypes.js +0 -9
- package/lib/RelayContext.js +0 -23
- package/lib/assertFragmentMap.js +0 -16
- package/lib/buildReactRelayContainer.js +7 -41
- package/lib/getRootVariablesForFragments.js +2 -19
- package/lib/hooks.js +3 -30
- package/lib/index.js +3 -39
- package/lib/isRelayEnvironment.js +1 -16
- package/lib/jest-react/enqueueTask.js +1 -25
- package/lib/jest-react/index.js +0 -1
- package/lib/jest-react/internalAct.js +2 -51
- package/lib/legacy.js +0 -20
- package/lib/multi-actor/ActorChange.js +0 -14
- package/lib/multi-actor/index.js +0 -10
- package/lib/multi-actor/useRelayActorEnvironment.js +2 -16
- package/lib/relay-hooks/EntryPointContainer.react.js +7 -23
- package/lib/relay-hooks/EntryPointTypes.flow.js +0 -10
- package/lib/relay-hooks/FragmentResource.js +130 -280
- package/lib/relay-hooks/HooksImplementation.js +0 -14
- package/lib/relay-hooks/InternalLogger.js +0 -11
- package/lib/relay-hooks/LRUCache.js +0 -39
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +27 -65
- package/lib/relay-hooks/MatchContainer.js +9 -111
- package/lib/relay-hooks/NestedRelayEntryPointBuilderUtils.js +9 -0
- package/lib/relay-hooks/ProfilerContext.js +0 -14
- package/lib/relay-hooks/QueryResource.js +14 -149
- package/lib/relay-hooks/RelayEnvironmentProvider.js +3 -17
- package/lib/relay-hooks/SuspenseResource.js +2 -59
- package/lib/relay-hooks/loadEntryPoint.js +10 -45
- package/lib/relay-hooks/loadQuery.js +29 -169
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +8 -58
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +6 -24
- package/lib/relay-hooks/react-cache/RelayReactCache.js +4 -20
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +13 -102
- package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +18 -75
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +79 -222
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +3 -27
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +11 -33
- package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +62 -85
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +20 -63
- package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +53 -179
- package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +5 -27
- package/lib/relay-hooks/useBlockingPaginationFragment.js +58 -121
- package/lib/relay-hooks/useClientQuery.js +0 -21
- package/lib/relay-hooks/useEntryPointLoader.js +12 -100
- package/lib/relay-hooks/useFetchTrackingRef.js +6 -33
- package/lib/relay-hooks/useFragment.js +5 -32
- package/lib/relay-hooks/useFragmentNode.js +14 -55
- package/lib/relay-hooks/useIsMountedRef.js +2 -14
- package/lib/relay-hooks/useIsOperationNodeActive.js +6 -29
- package/lib/relay-hooks/useIsParentQueryActive.js +1 -15
- package/lib/relay-hooks/useLazyLoadQuery.js +2 -23
- package/lib/relay-hooks/useLazyLoadQueryNode.js +18 -63
- package/lib/relay-hooks/useLoadMoreFunction.js +44 -100
- package/lib/relay-hooks/useMemoOperationDescriptor.js +4 -23
- package/lib/relay-hooks/useMemoVariables.js +8 -43
- package/lib/relay-hooks/useMutation.js +6 -34
- package/lib/relay-hooks/usePaginationFragment.js +49 -89
- package/lib/relay-hooks/usePreloadedQuery.js +10 -54
- package/lib/relay-hooks/useQueryLoader.js +18 -116
- package/lib/relay-hooks/useRefetchableFragment.js +4 -30
- package/lib/relay-hooks/useRefetchableFragmentNode.js +58 -184
- package/lib/relay-hooks/useRelayEnvironment.js +2 -16
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +2 -20
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -28
- package/lib/relay-hooks/useSubscription.js +3 -22
- package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +12 -0
- package/multi-actor/ActorChange.js.flow +1 -1
- package/multi-actor/index.js.flow +1 -1
- package/multi-actor/useRelayActorEnvironment.js.flow +2 -2
- package/package.json +2 -2
- package/react-relay-hooks.js +2 -2
- package/react-relay-hooks.min.js +2 -2
- package/react-relay-legacy.js +2 -2
- package/react-relay-legacy.min.js +2 -2
- package/react-relay.js +2 -2
- package/react-relay.min.js +2 -2
- package/relay-hooks/EntryPointContainer.react.js.flow +6 -1
- package/relay-hooks/EntryPointTypes.flow.js.flow +23 -20
- package/relay-hooks/FragmentResource.js.flow +148 -34
- package/relay-hooks/HooksImplementation.js.flow +1 -1
- package/relay-hooks/InternalLogger.js.flow +1 -1
- package/relay-hooks/LRUCache.js.flow +1 -1
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +19 -10
- package/relay-hooks/MatchContainer.js.flow +1 -1
- package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +51 -0
- package/relay-hooks/ProfilerContext.js.flow +1 -1
- package/relay-hooks/QueryResource.js.flow +25 -5
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
- package/relay-hooks/SuspenseResource.js.flow +1 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -7
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +40 -33
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +38 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +20 -18
- package/relay-hooks/__flowtests__/utils.js.flow +13 -2
- package/relay-hooks/loadEntryPoint.js.flow +15 -8
- package/relay-hooks/loadQuery.js.flow +32 -8
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +5 -6
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +17 -10
- package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -1
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +4 -4
- package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +5 -4
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +32 -14
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +4 -10
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
- package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +39 -49
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
- package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +29 -16
- package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +17 -33
- package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -58
- package/relay-hooks/useClientQuery.js.flow +3 -3
- package/relay-hooks/useEntryPointLoader.js.flow +10 -6
- package/relay-hooks/useFetchTrackingRef.js.flow +5 -4
- package/relay-hooks/useFragment.js.flow +2 -2
- package/relay-hooks/useFragmentNode.js.flow +7 -6
- package/relay-hooks/useIsMountedRef.js.flow +1 -1
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
- package/relay-hooks/useLazyLoadQuery.js.flow +2 -2
- package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -2
- package/relay-hooks/useLoadMoreFunction.js.flow +27 -16
- package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
- package/relay-hooks/useMemoVariables.js.flow +13 -29
- package/relay-hooks/useMutation.js.flow +30 -13
- package/relay-hooks/usePaginationFragment.js.flow +55 -54
- package/relay-hooks/usePreloadedQuery.js.flow +47 -22
- package/relay-hooks/useQueryLoader.js.flow +78 -21
- package/relay-hooks/useRefetchableFragment.js.flow +65 -33
- package/relay-hooks/useRefetchableFragmentNode.js.flow +38 -17
- package/relay-hooks/useRelayEnvironment.js.flow +2 -2
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -3
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -2
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
- package/lib/readContext.js +0 -27
- package/readContext.js.flow +0 -29
|
@@ -1,88 +1,56 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the MIT license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* @emails oncall+relay
|
|
9
|
-
* @format
|
|
10
|
-
*/
|
|
11
1
|
'use strict';
|
|
12
2
|
|
|
13
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
14
|
-
|
|
15
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
16
|
-
|
|
17
5
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
-
|
|
19
6
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
20
|
-
|
|
21
7
|
var LRUCache = require('./LRUCache');
|
|
22
|
-
|
|
23
8
|
var _require = require('./QueryResource'),
|
|
24
|
-
|
|
25
|
-
|
|
9
|
+
getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
|
|
26
10
|
var SuspenseResource = require('./SuspenseResource');
|
|
27
|
-
|
|
28
11
|
var invariant = require('invariant');
|
|
29
|
-
|
|
30
12
|
var _require2 = require('relay-runtime'),
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
13
|
+
_require2$__internal = _require2.__internal,
|
|
14
|
+
fetchQuery = _require2$__internal.fetchQuery,
|
|
15
|
+
getPromiseForActiveRequest = _require2$__internal.getPromiseForActiveRequest,
|
|
16
|
+
RelayFeatureFlags = _require2.RelayFeatureFlags,
|
|
17
|
+
createOperationDescriptor = _require2.createOperationDescriptor,
|
|
18
|
+
getFragmentIdentifier = _require2.getFragmentIdentifier,
|
|
19
|
+
getPendingOperationsForFragment = _require2.getPendingOperationsForFragment,
|
|
20
|
+
getSelector = _require2.getSelector,
|
|
21
|
+
getVariablesFromFragment = _require2.getVariablesFromFragment,
|
|
22
|
+
handlePotentialSnapshotErrors = _require2.handlePotentialSnapshotErrors,
|
|
23
|
+
isPromise = _require2.isPromise,
|
|
24
|
+
recycleNodesInto = _require2.recycleNodesInto;
|
|
44
25
|
var WEAKMAP_SUPPORTED = typeof WeakMap === 'function';
|
|
45
|
-
|
|
46
|
-
// capacity, readSpec() will fail to find cached entries and break object
|
|
47
|
-
// identity even if data hasn't changed.
|
|
48
|
-
var CACHE_CAPACITY = 1000000; // this is frozen so that users don't accidentally push data into the array
|
|
49
|
-
|
|
26
|
+
var CACHE_CAPACITY = 1000000;
|
|
50
27
|
var CONSTANT_READONLY_EMPTY_ARRAY = Object.freeze([]);
|
|
51
|
-
|
|
52
28
|
function isMissingData(snapshot) {
|
|
53
29
|
if (Array.isArray(snapshot)) {
|
|
54
30
|
return snapshot.some(function (s) {
|
|
55
31
|
return s.isMissingData;
|
|
56
32
|
});
|
|
57
33
|
}
|
|
58
|
-
|
|
59
34
|
return snapshot.isMissingData;
|
|
60
35
|
}
|
|
61
|
-
|
|
62
36
|
function hasMissingClientEdges(snapshot) {
|
|
63
37
|
var _snapshot$missingClie, _snapshot$missingClie2;
|
|
64
|
-
|
|
65
38
|
if (Array.isArray(snapshot)) {
|
|
66
39
|
return snapshot.some(function (s) {
|
|
67
40
|
var _s$missingClientEdges, _s$missingClientEdges2;
|
|
68
|
-
|
|
69
41
|
return ((_s$missingClientEdges = (_s$missingClientEdges2 = s.missingClientEdges) === null || _s$missingClientEdges2 === void 0 ? void 0 : _s$missingClientEdges2.length) !== null && _s$missingClientEdges !== void 0 ? _s$missingClientEdges : 0) > 0;
|
|
70
42
|
});
|
|
71
43
|
}
|
|
72
|
-
|
|
73
44
|
return ((_snapshot$missingClie = (_snapshot$missingClie2 = snapshot.missingClientEdges) === null || _snapshot$missingClie2 === void 0 ? void 0 : _snapshot$missingClie2.length) !== null && _snapshot$missingClie !== void 0 ? _snapshot$missingClie : 0) > 0;
|
|
74
45
|
}
|
|
75
|
-
|
|
76
46
|
function missingLiveResolverFields(snapshot) {
|
|
77
47
|
if (Array.isArray(snapshot)) {
|
|
78
48
|
return snapshot.map(function (s) {
|
|
79
49
|
return s.missingLiveResolverFields;
|
|
80
50
|
}).filter(Boolean).flat();
|
|
81
51
|
}
|
|
82
|
-
|
|
83
52
|
return snapshot.missingLiveResolverFields;
|
|
84
53
|
}
|
|
85
|
-
|
|
86
54
|
function singularOrPluralForEach(snapshot, f) {
|
|
87
55
|
if (Array.isArray(snapshot)) {
|
|
88
56
|
snapshot.forEach(f);
|
|
@@ -90,7 +58,6 @@ function singularOrPluralForEach(snapshot, f) {
|
|
|
90
58
|
f(snapshot);
|
|
91
59
|
}
|
|
92
60
|
}
|
|
93
|
-
|
|
94
61
|
function getFragmentResult(cacheKey, snapshot, storeEpoch) {
|
|
95
62
|
if (Array.isArray(snapshot)) {
|
|
96
63
|
return {
|
|
@@ -103,7 +70,6 @@ function getFragmentResult(cacheKey, snapshot, storeEpoch) {
|
|
|
103
70
|
storeEpoch: storeEpoch
|
|
104
71
|
};
|
|
105
72
|
}
|
|
106
|
-
|
|
107
73
|
return {
|
|
108
74
|
cacheKey: cacheKey,
|
|
109
75
|
snapshot: snapshot,
|
|
@@ -112,120 +78,71 @@ function getFragmentResult(cacheKey, snapshot, storeEpoch) {
|
|
|
112
78
|
storeEpoch: storeEpoch
|
|
113
79
|
};
|
|
114
80
|
}
|
|
115
|
-
/**
|
|
116
|
-
* The purpose of this cache is to allow information to be passed from an
|
|
117
|
-
* initial read which suspends through to the commit that follows a subsequent
|
|
118
|
-
* successful read. Specifically, the QueryResource result for the data fetch
|
|
119
|
-
* is passed through so that that query can be retained on commit.
|
|
120
|
-
*/
|
|
121
|
-
|
|
122
|
-
|
|
123
81
|
var ClientEdgeQueryResultsCache = /*#__PURE__*/function () {
|
|
124
82
|
function ClientEdgeQueryResultsCache(environment) {
|
|
125
83
|
(0, _defineProperty2["default"])(this, "_cache", new Map());
|
|
126
84
|
(0, _defineProperty2["default"])(this, "_retainCounts", new Map());
|
|
127
85
|
this._environment = environment;
|
|
128
86
|
}
|
|
129
|
-
|
|
130
87
|
var _proto = ClientEdgeQueryResultsCache.prototype;
|
|
131
|
-
|
|
132
88
|
_proto.get = function get(fragmentIdentifier) {
|
|
133
89
|
var _this$_cache$get$, _this$_cache$get;
|
|
134
|
-
|
|
135
90
|
return (_this$_cache$get$ = (_this$_cache$get = this._cache.get(fragmentIdentifier)) === null || _this$_cache$get === void 0 ? void 0 : _this$_cache$get[0]) !== null && _this$_cache$get$ !== void 0 ? _this$_cache$get$ : undefined;
|
|
136
91
|
};
|
|
137
|
-
|
|
138
|
-
_proto.recordQueryResults = function recordQueryResults(fragmentIdentifier, value // may be mutated after being passed here
|
|
139
|
-
) {
|
|
92
|
+
_proto.recordQueryResults = function recordQueryResults(fragmentIdentifier, value) {
|
|
140
93
|
var _this = this;
|
|
141
|
-
|
|
142
94
|
var existing = this._cache.get(fragmentIdentifier);
|
|
143
|
-
|
|
144
95
|
if (!existing) {
|
|
145
96
|
var suspenseResource = new SuspenseResource(function () {
|
|
146
97
|
return _this._retain(fragmentIdentifier);
|
|
147
98
|
});
|
|
148
|
-
|
|
149
99
|
this._cache.set(fragmentIdentifier, [value, suspenseResource]);
|
|
150
|
-
|
|
151
100
|
suspenseResource.temporaryRetain(this._environment);
|
|
152
101
|
} else {
|
|
153
102
|
var existingResults = existing[0],
|
|
154
|
-
|
|
103
|
+
_suspenseResource = existing[1];
|
|
155
104
|
value.forEach(function (queryResult) {
|
|
156
105
|
existingResults.push(queryResult);
|
|
157
106
|
});
|
|
158
|
-
|
|
159
107
|
_suspenseResource.temporaryRetain(this._environment);
|
|
160
108
|
}
|
|
161
109
|
};
|
|
162
|
-
|
|
163
110
|
_proto._retain = function _retain(id) {
|
|
164
111
|
var _this2 = this;
|
|
165
|
-
|
|
166
112
|
var _this$_retainCounts$g;
|
|
167
|
-
|
|
168
113
|
var retainCount = ((_this$_retainCounts$g = this._retainCounts.get(id)) !== null && _this$_retainCounts$g !== void 0 ? _this$_retainCounts$g : 0) + 1;
|
|
169
|
-
|
|
170
114
|
this._retainCounts.set(id, retainCount);
|
|
171
|
-
|
|
172
115
|
return {
|
|
173
116
|
dispose: function dispose() {
|
|
174
117
|
var _this$_retainCounts$g2;
|
|
175
|
-
|
|
176
118
|
var newRetainCount = ((_this$_retainCounts$g2 = _this2._retainCounts.get(id)) !== null && _this$_retainCounts$g2 !== void 0 ? _this$_retainCounts$g2 : 0) - 1;
|
|
177
|
-
|
|
178
119
|
if (newRetainCount > 0) {
|
|
179
120
|
_this2._retainCounts.set(id, newRetainCount);
|
|
180
121
|
} else {
|
|
181
122
|
_this2._retainCounts["delete"](id);
|
|
182
|
-
|
|
183
123
|
_this2._cache["delete"](id);
|
|
184
124
|
}
|
|
185
125
|
}
|
|
186
126
|
};
|
|
187
127
|
};
|
|
188
|
-
|
|
189
128
|
return ClientEdgeQueryResultsCache;
|
|
190
129
|
}();
|
|
191
|
-
|
|
192
130
|
var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
193
131
|
function FragmentResourceImpl(environment) {
|
|
194
132
|
this._environment = environment;
|
|
195
133
|
this._cache = LRUCache.create(CACHE_CAPACITY);
|
|
196
|
-
|
|
197
134
|
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
198
135
|
this._clientEdgeQueryResultsCache = new ClientEdgeQueryResultsCache(environment);
|
|
199
136
|
}
|
|
200
137
|
}
|
|
201
|
-
/**
|
|
202
|
-
* This function should be called during a Component's render function,
|
|
203
|
-
* to read the data for a fragment, or suspend if the fragment is being
|
|
204
|
-
* fetched.
|
|
205
|
-
*/
|
|
206
|
-
|
|
207
|
-
|
|
208
138
|
var _proto2 = FragmentResourceImpl.prototype;
|
|
209
|
-
|
|
210
139
|
_proto2.read = function read(fragmentNode, fragmentRef, componentDisplayName, fragmentKey) {
|
|
211
140
|
return this.readWithIdentifier(fragmentNode, fragmentRef, getFragmentIdentifier(fragmentNode, fragmentRef), componentDisplayName, fragmentKey);
|
|
212
|
-
}
|
|
213
|
-
/**
|
|
214
|
-
* Like `read`, but with a pre-computed fragmentIdentifier that should be
|
|
215
|
-
* equal to `getFragmentIdentifier(fragmentNode, fragmentRef)` from the
|
|
216
|
-
* arguments.
|
|
217
|
-
*/
|
|
218
|
-
;
|
|
219
|
-
|
|
141
|
+
};
|
|
220
142
|
_proto2.readWithIdentifier = function readWithIdentifier(fragmentNode, fragmentRef, fragmentIdentifier, componentDisplayName, fragmentKey) {
|
|
221
143
|
var _this3 = this;
|
|
222
|
-
|
|
223
144
|
var _fragmentNode$metadat, _fragmentNode$metadat2, _missingLiveResolverF2, _missingLiveResolverF3;
|
|
224
|
-
|
|
225
|
-
var environment = this._environment; // If fragmentRef is null or undefined, pass it directly through.
|
|
226
|
-
// This is a convenience when consuming fragments via a HOC API, when the
|
|
227
|
-
// prop corresponding to the fragment ref might be passed as null.
|
|
228
|
-
|
|
145
|
+
var environment = this._environment;
|
|
229
146
|
if (fragmentRef == null) {
|
|
230
147
|
return {
|
|
231
148
|
cacheKey: fragmentIdentifier,
|
|
@@ -235,13 +152,9 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
235
152
|
storeEpoch: 0
|
|
236
153
|
};
|
|
237
154
|
}
|
|
238
|
-
|
|
239
|
-
var storeEpoch = environment.getStore().getEpoch(); // If fragmentRef is plural, ensure that it is an array.
|
|
240
|
-
// If it's empty, return the empty array directly before doing any more work.
|
|
241
|
-
|
|
155
|
+
var storeEpoch = environment.getStore().getEpoch();
|
|
242
156
|
if ((fragmentNode === null || fragmentNode === void 0 ? void 0 : (_fragmentNode$metadat = fragmentNode.metadata) === null || _fragmentNode$metadat === void 0 ? void 0 : _fragmentNode$metadat.plural) === true) {
|
|
243
157
|
!Array.isArray(fragmentRef) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected fragment pointer%s for fragment `%s` to be ' + 'an array, instead got `%s`. Remove `@relay(plural: true)` ' + 'from fragment `%s` to allow the prop to be an object.', fragmentKey != null ? " for key `".concat(fragmentKey, "`") : '', fragmentNode.name, typeof fragmentRef, fragmentNode.name) : invariant(false) : void 0;
|
|
244
|
-
|
|
245
158
|
if (fragmentRef.length === 0) {
|
|
246
159
|
return {
|
|
247
160
|
cacheKey: fragmentIdentifier,
|
|
@@ -251,15 +164,10 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
251
164
|
storeEpoch: storeEpoch
|
|
252
165
|
};
|
|
253
166
|
}
|
|
254
|
-
}
|
|
255
|
-
// 1. Check if there's a cached value for this fragment
|
|
256
|
-
|
|
257
|
-
|
|
167
|
+
}
|
|
258
168
|
var cachedValue = this._cache.get(fragmentIdentifier);
|
|
259
|
-
|
|
260
169
|
if (cachedValue != null) {
|
|
261
170
|
var _missingLiveResolverF;
|
|
262
|
-
|
|
263
171
|
if (cachedValue.kind === 'pending' && isPromise(cachedValue.promise)) {
|
|
264
172
|
environment.__log({
|
|
265
173
|
name: 'suspense.fragment',
|
|
@@ -270,101 +178,80 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
270
178
|
isPromiseCached: true,
|
|
271
179
|
pendingOperations: cachedValue.pendingOperations
|
|
272
180
|
});
|
|
273
|
-
|
|
274
181
|
throw cachedValue.promise;
|
|
275
182
|
}
|
|
276
|
-
|
|
277
183
|
if (cachedValue.kind === 'done' && cachedValue.result.snapshot && !((_missingLiveResolverF = missingLiveResolverFields(cachedValue.result.snapshot)) !== null && _missingLiveResolverF !== void 0 && _missingLiveResolverF.length)) {
|
|
278
|
-
this.
|
|
279
|
-
|
|
184
|
+
this._throwOrLogErrorsInSnapshot(cachedValue.result.snapshot);
|
|
185
|
+
if (cachedValue.result.isMissingData) {
|
|
186
|
+
environment.__log({
|
|
187
|
+
name: 'fragmentresource.missing_data',
|
|
188
|
+
data: cachedValue.result.data,
|
|
189
|
+
fragment: fragmentNode,
|
|
190
|
+
isRelayHooks: true,
|
|
191
|
+
cached: true
|
|
192
|
+
});
|
|
193
|
+
}
|
|
280
194
|
return cachedValue.result;
|
|
281
195
|
}
|
|
282
|
-
}
|
|
283
|
-
// If the snapshot has data, return it and save it in cache
|
|
284
|
-
|
|
285
|
-
|
|
196
|
+
}
|
|
286
197
|
var fragmentSelector = getSelector(fragmentNode, fragmentRef);
|
|
287
198
|
!(fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to receive an object where `...%s` was spread, ' + 'but the fragment reference was not found`. This is most ' + 'likely the result of:\n' + "- Forgetting to spread `%s` in `%s`'s parent's fragment.\n" + '- Conditionally fetching `%s` but unconditionally passing %s prop ' + 'to `%s`. If the parent fragment only fetches the fragment conditionally ' + '- with e.g. `@include`, `@skip`, or inside a `... on SomeType { }` ' + 'spread - then the fragment reference will not exist. ' + 'In this case, pass `null` if the conditions for evaluating the ' + 'fragment are not met (e.g. if the `@include(if)` value is false.)', fragmentNode.name, fragmentNode.name, componentDisplayName, fragmentNode.name, fragmentKey == null ? 'a fragment reference' : "the `".concat(fragmentKey, "`"), componentDisplayName) : invariant(false) : void 0;
|
|
288
|
-
var
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
199
|
+
var fragmentResult = null;
|
|
200
|
+
var snapshot = null;
|
|
201
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && cachedValue != null && cachedValue.kind === 'missing') {
|
|
202
|
+
fragmentResult = cachedValue.result;
|
|
203
|
+
snapshot = cachedValue.snapshot;
|
|
204
|
+
} else {
|
|
205
|
+
snapshot = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors.map(function (s) {
|
|
206
|
+
return environment.lookup(s);
|
|
207
|
+
}) : environment.lookup(fragmentSelector);
|
|
208
|
+
fragmentResult = getFragmentResult(fragmentIdentifier, snapshot, storeEpoch);
|
|
209
|
+
}
|
|
293
210
|
if (!fragmentResult.isMissingData) {
|
|
294
|
-
this.
|
|
295
|
-
|
|
211
|
+
this._throwOrLogErrorsInSnapshot(snapshot);
|
|
296
212
|
this._cache.set(fragmentIdentifier, {
|
|
297
213
|
kind: 'done',
|
|
298
214
|
result: fragmentResult
|
|
299
215
|
});
|
|
300
|
-
|
|
301
216
|
return fragmentResult;
|
|
302
|
-
}
|
|
303
|
-
// suspend to await the data: First if any client edges were traversed where
|
|
304
|
-
// the destination record was missing data; in that case we initiate a query
|
|
305
|
-
// here to fetch the missing data. Second, there may already be a request
|
|
306
|
-
// in flight for the fragment's parent query, or for another operation that
|
|
307
|
-
// may affect the parent's query data, such as a mutation or subscription.
|
|
308
|
-
// For any of these cases we can get a promise, which we will cache and
|
|
309
|
-
// suspend on.
|
|
310
|
-
// First, initiate a query for any client edges that were missing data:
|
|
311
|
-
|
|
312
|
-
|
|
217
|
+
}
|
|
313
218
|
var clientEdgeRequests = null;
|
|
314
|
-
|
|
315
219
|
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && ((_fragmentNode$metadat2 = fragmentNode.metadata) === null || _fragmentNode$metadat2 === void 0 ? void 0 : _fragmentNode$metadat2.hasClientEdges) === true && hasMissingClientEdges(snapshot)) {
|
|
316
220
|
clientEdgeRequests = [];
|
|
317
221
|
var queryResource = getQueryResourceForEnvironment(this._environment);
|
|
318
222
|
var queryResults = [];
|
|
319
223
|
singularOrPluralForEach(snapshot, function (snap) {
|
|
320
224
|
var _snap$missingClientEd;
|
|
321
|
-
|
|
322
225
|
(_snap$missingClientEd = snap.missingClientEdges) === null || _snap$missingClientEd === void 0 ? void 0 : _snap$missingClientEd.forEach(function (_ref) {
|
|
323
226
|
var _clientEdgeRequests;
|
|
324
|
-
|
|
325
227
|
var request = _ref.request,
|
|
326
|
-
|
|
327
|
-
|
|
228
|
+
clientEdgeDestinationID = _ref.clientEdgeDestinationID;
|
|
328
229
|
var _this3$_performClient = _this3._performClientEdgeQuery(queryResource, fragmentNode, fragmentRef, request, clientEdgeDestinationID),
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
230
|
+
queryResult = _this3$_performClient.queryResult,
|
|
231
|
+
requestDescriptor = _this3$_performClient.requestDescriptor;
|
|
332
232
|
queryResults.push(queryResult);
|
|
333
233
|
(_clientEdgeRequests = clientEdgeRequests) === null || _clientEdgeRequests === void 0 ? void 0 : _clientEdgeRequests.push(requestDescriptor);
|
|
334
234
|
});
|
|
335
|
-
});
|
|
336
|
-
// subscribed to. This merges with any existing query results:
|
|
337
|
-
|
|
235
|
+
});
|
|
338
236
|
!(this._clientEdgeQueryResultsCache != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Client edge query result cache should exist when ENABLE_CLIENT_EDGES is on.') : invariant(false) : void 0;
|
|
339
|
-
|
|
340
237
|
this._clientEdgeQueryResultsCache.recordQueryResults(fragmentIdentifier, queryResults);
|
|
341
238
|
}
|
|
342
|
-
|
|
343
239
|
var clientEdgePromises = [];
|
|
344
|
-
|
|
345
240
|
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && clientEdgeRequests) {
|
|
346
241
|
clientEdgePromises = clientEdgeRequests.map(function (request) {
|
|
347
242
|
return getPromiseForActiveRequest(_this3._environment, request);
|
|
348
243
|
}).filter(Boolean);
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
|
|
244
|
+
}
|
|
352
245
|
var fragmentOwner = fragmentSelector.kind === 'PluralReaderSelector' ? fragmentSelector.selectors[0].owner : fragmentSelector.owner;
|
|
353
|
-
|
|
354
246
|
var parentQueryPromiseResult = this._getAndSavePromiseForFragmentRequestInFlight(fragmentIdentifier, fragmentNode, fragmentOwner, fragmentResult);
|
|
355
|
-
|
|
356
|
-
var parentQueryPromiseResultPromise = parentQueryPromiseResult === null || parentQueryPromiseResult === void 0 ? void 0 : parentQueryPromiseResult.promise; // for refinement
|
|
357
|
-
|
|
247
|
+
var parentQueryPromiseResultPromise = parentQueryPromiseResult === null || parentQueryPromiseResult === void 0 ? void 0 : parentQueryPromiseResult.promise;
|
|
358
248
|
var missingResolverFieldPromises = (_missingLiveResolverF2 = (_missingLiveResolverF3 = missingLiveResolverFields(snapshot)) === null || _missingLiveResolverF3 === void 0 ? void 0 : _missingLiveResolverF3.map(function (_ref2) {
|
|
359
249
|
var liveStateID = _ref2.liveStateID;
|
|
360
|
-
var store = environment.getStore();
|
|
361
|
-
|
|
250
|
+
var store = environment.getStore();
|
|
362
251
|
return store.getLiveResolverPromise(liveStateID);
|
|
363
252
|
})) !== null && _missingLiveResolverF2 !== void 0 ? _missingLiveResolverF2 : [];
|
|
364
|
-
|
|
365
253
|
if (clientEdgePromises.length || missingResolverFieldPromises.length || isPromise(parentQueryPromiseResultPromise)) {
|
|
366
254
|
var _parentQueryPromiseRe, _clientEdgeRequests2;
|
|
367
|
-
|
|
368
255
|
environment.__log({
|
|
369
256
|
name: 'suspense.fragment',
|
|
370
257
|
data: fragmentResult.data,
|
|
@@ -372,61 +259,56 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
372
259
|
isRelayHooks: true,
|
|
373
260
|
isPromiseCached: false,
|
|
374
261
|
isMissingData: fragmentResult.isMissingData,
|
|
375
|
-
// TODO! Attach information here about missing live resolver fields
|
|
376
262
|
pendingOperations: [].concat((0, _toConsumableArray2["default"])((_parentQueryPromiseRe = parentQueryPromiseResult === null || parentQueryPromiseResult === void 0 ? void 0 : parentQueryPromiseResult.pendingOperations) !== null && _parentQueryPromiseRe !== void 0 ? _parentQueryPromiseRe : []), (0, _toConsumableArray2["default"])((_clientEdgeRequests2 = clientEdgeRequests) !== null && _clientEdgeRequests2 !== void 0 ? _clientEdgeRequests2 : []))
|
|
377
263
|
});
|
|
378
|
-
|
|
379
264
|
var promises = [];
|
|
380
|
-
|
|
381
265
|
if (clientEdgePromises.length > 0) {
|
|
382
266
|
promises = promises.concat(clientEdgePromises);
|
|
383
267
|
}
|
|
384
|
-
|
|
385
268
|
if (missingResolverFieldPromises.length > 0) {
|
|
386
269
|
promises = promises.concat(missingResolverFieldPromises);
|
|
387
270
|
}
|
|
388
|
-
|
|
389
271
|
if (promises.length > 0) {
|
|
390
272
|
if (parentQueryPromiseResultPromise) {
|
|
391
273
|
promises.push(parentQueryPromiseResultPromise);
|
|
392
274
|
}
|
|
393
|
-
|
|
394
275
|
throw Promise.all(promises);
|
|
395
|
-
}
|
|
396
|
-
// because some of our suspense-related code is relying on the instance equality
|
|
397
|
-
// of thrown promises. See FragmentResource-test.js
|
|
398
|
-
|
|
399
|
-
|
|
276
|
+
}
|
|
400
277
|
if (parentQueryPromiseResultPromise) {
|
|
401
278
|
throw parentQueryPromiseResultPromise;
|
|
402
279
|
}
|
|
403
280
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
281
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && fragmentResult.isMissingData) {
|
|
282
|
+
this._cache.set(fragmentIdentifier, {
|
|
283
|
+
kind: 'done',
|
|
284
|
+
result: fragmentResult
|
|
285
|
+
});
|
|
286
|
+
}
|
|
287
|
+
this._throwOrLogErrorsInSnapshot(snapshot);
|
|
288
|
+
environment.__log({
|
|
289
|
+
name: 'fragmentresource.missing_data',
|
|
290
|
+
data: fragmentResult.data,
|
|
291
|
+
fragment: fragmentNode,
|
|
292
|
+
isRelayHooks: true,
|
|
293
|
+
cached: false
|
|
294
|
+
});
|
|
407
295
|
return getFragmentResult(fragmentIdentifier, snapshot, storeEpoch);
|
|
408
296
|
};
|
|
409
|
-
|
|
410
297
|
_proto2._performClientEdgeQuery = function _performClientEdgeQuery(queryResource, fragmentNode, fragmentRef, request, clientEdgeDestinationID) {
|
|
411
298
|
var originalVariables = getVariablesFromFragment(fragmentNode, fragmentRef);
|
|
412
299
|
var variables = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, originalVariables), {}, {
|
|
413
|
-
id: clientEdgeDestinationID
|
|
414
|
-
|
|
300
|
+
id: clientEdgeDestinationID
|
|
415
301
|
});
|
|
416
|
-
var operation = createOperationDescriptor(request, variables, {}
|
|
417
|
-
);
|
|
302
|
+
var operation = createOperationDescriptor(request, variables, {});
|
|
418
303
|
var fetchObservable = fetchQuery(this._environment, operation);
|
|
419
|
-
var queryResult = queryResource.prepare(operation, fetchObservable
|
|
420
|
-
);
|
|
304
|
+
var queryResult = queryResource.prepare(operation, fetchObservable);
|
|
421
305
|
return {
|
|
422
306
|
requestDescriptor: operation.request,
|
|
423
307
|
queryResult: queryResult
|
|
424
308
|
};
|
|
425
309
|
};
|
|
426
|
-
|
|
427
|
-
_proto2._handlePotentialSnapshotErrorsInSnapshot = function _handlePotentialSnapshotErrorsInSnapshot(snapshot) {
|
|
310
|
+
_proto2._throwOrLogErrorsInSnapshot = function _throwOrLogErrorsInSnapshot(snapshot) {
|
|
428
311
|
var _this4 = this;
|
|
429
|
-
|
|
430
312
|
if (Array.isArray(snapshot)) {
|
|
431
313
|
snapshot.forEach(function (s) {
|
|
432
314
|
handlePotentialSnapshotErrors(_this4._environment, s.missingRequiredFields, s.relayResolverErrors);
|
|
@@ -435,53 +317,36 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
435
317
|
handlePotentialSnapshotErrors(this._environment, snapshot.missingRequiredFields, snapshot.relayResolverErrors);
|
|
436
318
|
}
|
|
437
319
|
};
|
|
438
|
-
|
|
439
320
|
_proto2.readSpec = function readSpec(fragmentNodes, fragmentRefs, componentDisplayName) {
|
|
440
321
|
var result = {};
|
|
441
|
-
|
|
442
322
|
for (var key in fragmentNodes) {
|
|
443
323
|
result[key] = this.read(fragmentNodes[key], fragmentRefs[key], componentDisplayName, key);
|
|
444
324
|
}
|
|
445
|
-
|
|
446
325
|
return result;
|
|
447
326
|
};
|
|
448
|
-
|
|
449
327
|
_proto2.subscribe = function subscribe(fragmentResult, callback) {
|
|
450
328
|
var _this5 = this;
|
|
451
|
-
|
|
452
329
|
var environment = this._environment;
|
|
453
330
|
var cacheKey = fragmentResult.cacheKey;
|
|
454
331
|
var renderedSnapshot = fragmentResult.snapshot;
|
|
455
|
-
|
|
456
332
|
if (!renderedSnapshot) {
|
|
457
333
|
return {
|
|
458
334
|
dispose: function dispose() {}
|
|
459
335
|
};
|
|
460
|
-
}
|
|
461
|
-
// TODO(T44066760): More efficiently detect if we missed an update
|
|
462
|
-
|
|
463
|
-
|
|
336
|
+
}
|
|
464
337
|
var _this$checkMissedUpda = this.checkMissedUpdates(fragmentResult),
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
// the latest data.
|
|
468
|
-
|
|
469
|
-
|
|
338
|
+
didMissUpdates = _this$checkMissedUpda[0],
|
|
339
|
+
currentSnapshot = _this$checkMissedUpda[1];
|
|
470
340
|
if (didMissUpdates) {
|
|
471
341
|
callback();
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
|
|
342
|
+
}
|
|
475
343
|
var disposables = [];
|
|
476
|
-
|
|
477
344
|
if (Array.isArray(renderedSnapshot)) {
|
|
478
345
|
!Array.isArray(currentSnapshot) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected snapshots to be plural. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
479
346
|
currentSnapshot.forEach(function (snapshot, idx) {
|
|
480
347
|
disposables.push(environment.subscribe(snapshot, function (latestSnapshot) {
|
|
481
348
|
var storeEpoch = environment.getStore().getEpoch();
|
|
482
|
-
|
|
483
349
|
_this5._updatePluralSnapshot(cacheKey, currentSnapshot, latestSnapshot, idx, storeEpoch);
|
|
484
|
-
|
|
485
350
|
callback();
|
|
486
351
|
}));
|
|
487
352
|
});
|
|
@@ -489,21 +354,25 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
489
354
|
!(currentSnapshot != null && !Array.isArray(currentSnapshot)) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected snapshot to be singular. ' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
490
355
|
disposables.push(environment.subscribe(currentSnapshot, function (latestSnapshot) {
|
|
491
356
|
var storeEpoch = environment.getStore().getEpoch();
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
357
|
+
var result = getFragmentResult(cacheKey, latestSnapshot, storeEpoch);
|
|
358
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && result.isMissingData) {
|
|
359
|
+
_this5._cache.set(cacheKey, {
|
|
360
|
+
kind: 'missing',
|
|
361
|
+
result: result,
|
|
362
|
+
snapshot: latestSnapshot
|
|
363
|
+
});
|
|
364
|
+
} else {
|
|
365
|
+
_this5._cache.set(cacheKey, {
|
|
366
|
+
kind: 'done',
|
|
367
|
+
result: getFragmentResult(cacheKey, latestSnapshot, storeEpoch)
|
|
368
|
+
});
|
|
369
|
+
}
|
|
498
370
|
callback();
|
|
499
371
|
}));
|
|
500
372
|
}
|
|
501
|
-
|
|
502
373
|
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
503
374
|
var _this$_clientEdgeQuer, _this$_clientEdgeQuer2;
|
|
504
|
-
|
|
505
375
|
var clientEdgeQueryResults = (_this$_clientEdgeQuer = (_this$_clientEdgeQuer2 = this._clientEdgeQueryResultsCache) === null || _this$_clientEdgeQuer2 === void 0 ? void 0 : _this$_clientEdgeQuer2.get(cacheKey)) !== null && _this$_clientEdgeQuer !== void 0 ? _this$_clientEdgeQuer : undefined;
|
|
506
|
-
|
|
507
376
|
if (clientEdgeQueryResults !== null && clientEdgeQueryResults !== void 0 && clientEdgeQueryResults.length) {
|
|
508
377
|
var queryResource = getQueryResourceForEnvironment(this._environment);
|
|
509
378
|
clientEdgeQueryResults.forEach(function (queryResult) {
|
|
@@ -511,21 +380,17 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
511
380
|
});
|
|
512
381
|
}
|
|
513
382
|
}
|
|
514
|
-
|
|
515
383
|
return {
|
|
516
384
|
dispose: function dispose() {
|
|
517
385
|
disposables.forEach(function (s) {
|
|
518
386
|
return s.dispose();
|
|
519
387
|
});
|
|
520
|
-
|
|
521
388
|
_this5._cache["delete"](cacheKey);
|
|
522
389
|
}
|
|
523
390
|
};
|
|
524
391
|
};
|
|
525
|
-
|
|
526
392
|
_proto2.subscribeSpec = function subscribeSpec(fragmentResults, callback) {
|
|
527
393
|
var _this6 = this;
|
|
528
|
-
|
|
529
394
|
var disposables = Object.keys(fragmentResults).map(function (key) {
|
|
530
395
|
return _this6.subscribe(fragmentResults[key], callback);
|
|
531
396
|
});
|
|
@@ -537,25 +402,18 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
537
402
|
}
|
|
538
403
|
};
|
|
539
404
|
};
|
|
540
|
-
|
|
541
405
|
_proto2.checkMissedUpdates = function checkMissedUpdates(fragmentResult) {
|
|
542
406
|
var environment = this._environment;
|
|
543
407
|
var renderedSnapshot = fragmentResult.snapshot;
|
|
544
|
-
|
|
545
408
|
if (!renderedSnapshot) {
|
|
546
409
|
return [false, null];
|
|
547
410
|
}
|
|
548
|
-
|
|
549
|
-
var storeEpoch = null; // Bail out if the store hasn't been written since last read
|
|
550
|
-
|
|
411
|
+
var storeEpoch = null;
|
|
551
412
|
storeEpoch = environment.getStore().getEpoch();
|
|
552
|
-
|
|
553
413
|
if (fragmentResult.storeEpoch === storeEpoch) {
|
|
554
414
|
return [false, fragmentResult.snapshot];
|
|
555
415
|
}
|
|
556
|
-
|
|
557
416
|
var cacheKey = fragmentResult.cacheKey;
|
|
558
|
-
|
|
559
417
|
if (Array.isArray(renderedSnapshot)) {
|
|
560
418
|
var didMissUpdates = false;
|
|
561
419
|
var currentSnapshots = [];
|
|
@@ -564,28 +422,31 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
564
422
|
var renderData = snapshot.data;
|
|
565
423
|
var currentData = currentSnapshot.data;
|
|
566
424
|
var updatedData = recycleNodesInto(renderData, currentData);
|
|
567
|
-
|
|
568
425
|
if (updatedData !== renderData) {
|
|
569
426
|
currentSnapshot = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, currentSnapshot), {}, {
|
|
570
427
|
data: updatedData
|
|
571
428
|
});
|
|
572
429
|
didMissUpdates = true;
|
|
573
430
|
}
|
|
574
|
-
|
|
575
431
|
currentSnapshots[idx] = currentSnapshot;
|
|
576
|
-
});
|
|
577
|
-
// returning different `data` instances
|
|
578
|
-
|
|
432
|
+
});
|
|
579
433
|
if (didMissUpdates) {
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
434
|
+
var result = getFragmentResult(cacheKey, currentSnapshots, storeEpoch);
|
|
435
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && result.isMissingData) {
|
|
436
|
+
this._cache.set(cacheKey, {
|
|
437
|
+
kind: 'missing',
|
|
438
|
+
result: result,
|
|
439
|
+
snapshot: currentSnapshots
|
|
440
|
+
});
|
|
441
|
+
} else {
|
|
442
|
+
this._cache.set(cacheKey, {
|
|
443
|
+
kind: 'done',
|
|
444
|
+
result: result
|
|
445
|
+
});
|
|
446
|
+
}
|
|
584
447
|
}
|
|
585
|
-
|
|
586
448
|
return [didMissUpdates, currentSnapshots];
|
|
587
449
|
}
|
|
588
|
-
|
|
589
450
|
var currentSnapshot = environment.lookup(renderedSnapshot.selector);
|
|
590
451
|
var renderData = renderedSnapshot.data;
|
|
591
452
|
var currentData = currentSnapshot.data;
|
|
@@ -600,111 +461,100 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
|
600
461
|
missingRequiredFields: currentSnapshot.missingRequiredFields,
|
|
601
462
|
relayResolverErrors: currentSnapshot.relayResolverErrors
|
|
602
463
|
};
|
|
603
|
-
|
|
604
464
|
if (updatedData !== renderData) {
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
465
|
+
var _result = getFragmentResult(cacheKey, updatedCurrentSnapshot, storeEpoch);
|
|
466
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && _result.isMissingData) {
|
|
467
|
+
this._cache.set(cacheKey, {
|
|
468
|
+
kind: 'missing',
|
|
469
|
+
result: _result,
|
|
470
|
+
snapshot: updatedCurrentSnapshot
|
|
471
|
+
});
|
|
472
|
+
} else {
|
|
473
|
+
this._cache.set(cacheKey, {
|
|
474
|
+
kind: 'done',
|
|
475
|
+
result: _result
|
|
476
|
+
});
|
|
477
|
+
}
|
|
609
478
|
}
|
|
610
|
-
|
|
611
479
|
return [updatedData !== renderData, updatedCurrentSnapshot];
|
|
612
480
|
};
|
|
613
|
-
|
|
614
481
|
_proto2.checkMissedUpdatesSpec = function checkMissedUpdatesSpec(fragmentResults) {
|
|
615
482
|
var _this7 = this;
|
|
616
|
-
|
|
617
483
|
return Object.keys(fragmentResults).some(function (key) {
|
|
618
484
|
return _this7.checkMissedUpdates(fragmentResults[key])[0];
|
|
619
485
|
});
|
|
620
486
|
};
|
|
621
|
-
|
|
622
487
|
_proto2._getAndSavePromiseForFragmentRequestInFlight = function _getAndSavePromiseForFragmentRequestInFlight(cacheKey, fragmentNode, fragmentOwner, fragmentResult) {
|
|
623
488
|
var _this8 = this;
|
|
624
|
-
|
|
625
489
|
var pendingOperationsResult = getPendingOperationsForFragment(this._environment, fragmentNode, fragmentOwner);
|
|
626
|
-
|
|
627
490
|
if (pendingOperationsResult == null) {
|
|
628
491
|
return null;
|
|
629
|
-
}
|
|
630
|
-
// update the cache with the latest data available in the store before
|
|
631
|
-
// resolving the Promise
|
|
632
|
-
|
|
633
|
-
|
|
492
|
+
}
|
|
634
493
|
var networkPromise = pendingOperationsResult.promise;
|
|
635
494
|
var pendingOperations = pendingOperationsResult.pendingOperations;
|
|
636
495
|
var promise = networkPromise.then(function () {
|
|
637
496
|
_this8._cache["delete"](cacheKey);
|
|
638
497
|
})["catch"](function (error) {
|
|
639
498
|
_this8._cache["delete"](cacheKey);
|
|
640
|
-
});
|
|
641
|
-
|
|
499
|
+
});
|
|
642
500
|
promise.displayName = networkPromise.displayName;
|
|
643
|
-
|
|
644
501
|
this._cache.set(cacheKey, {
|
|
645
502
|
kind: 'pending',
|
|
646
503
|
pendingOperations: pendingOperations,
|
|
647
504
|
promise: promise,
|
|
648
505
|
result: fragmentResult
|
|
649
506
|
});
|
|
650
|
-
|
|
651
507
|
return {
|
|
652
508
|
promise: promise,
|
|
653
509
|
pendingOperations: pendingOperations
|
|
654
510
|
};
|
|
655
511
|
};
|
|
656
|
-
|
|
657
512
|
_proto2._updatePluralSnapshot = function _updatePluralSnapshot(cacheKey, baseSnapshots, latestSnapshot, idx, storeEpoch) {
|
|
658
513
|
var _currentFragmentResul;
|
|
659
|
-
|
|
660
514
|
var currentFragmentResult = this._cache.get(cacheKey);
|
|
661
|
-
|
|
662
515
|
if (isPromise(currentFragmentResult)) {
|
|
663
516
|
reportInvalidCachedData(latestSnapshot.selector.node.name);
|
|
664
517
|
return;
|
|
665
518
|
}
|
|
666
|
-
|
|
667
519
|
var currentSnapshot = currentFragmentResult === null || currentFragmentResult === void 0 ? void 0 : (_currentFragmentResul = currentFragmentResult.result) === null || _currentFragmentResul === void 0 ? void 0 : _currentFragmentResul.snapshot;
|
|
668
|
-
|
|
669
520
|
if (currentSnapshot && !Array.isArray(currentSnapshot)) {
|
|
670
521
|
reportInvalidCachedData(latestSnapshot.selector.node.name);
|
|
671
522
|
return;
|
|
672
523
|
}
|
|
673
|
-
|
|
674
524
|
var nextSnapshots = currentSnapshot ? (0, _toConsumableArray2["default"])(currentSnapshot) : (0, _toConsumableArray2["default"])(baseSnapshots);
|
|
675
525
|
nextSnapshots[idx] = latestSnapshot;
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
526
|
+
var result = getFragmentResult(cacheKey, nextSnapshots, storeEpoch);
|
|
527
|
+
if (RelayFeatureFlags.ENABLE_RELAY_OPERATION_TRACKER_SUSPENSE && result.isMissingData) {
|
|
528
|
+
this._cache.set(cacheKey, {
|
|
529
|
+
kind: 'missing',
|
|
530
|
+
result: result,
|
|
531
|
+
snapshot: nextSnapshots
|
|
532
|
+
});
|
|
533
|
+
} else {
|
|
534
|
+
this._cache.set(cacheKey, {
|
|
535
|
+
kind: 'done',
|
|
536
|
+
result: result
|
|
537
|
+
});
|
|
538
|
+
}
|
|
681
539
|
};
|
|
682
|
-
|
|
683
540
|
return FragmentResourceImpl;
|
|
684
541
|
}();
|
|
685
|
-
|
|
686
542
|
function reportInvalidCachedData(nodeName) {
|
|
687
543
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to find cached data for plural fragment `%s` when ' + 'receiving a subscription. ' + "If you're seeing this, this is likely a bug in Relay.", nodeName) : invariant(false) : void 0;
|
|
688
544
|
}
|
|
689
|
-
|
|
690
545
|
function createFragmentResource(environment) {
|
|
691
546
|
return new FragmentResourceImpl(environment);
|
|
692
547
|
}
|
|
693
|
-
|
|
694
548
|
var dataResources = WEAKMAP_SUPPORTED ? new WeakMap() : new Map();
|
|
695
|
-
|
|
696
549
|
function getFragmentResourceForEnvironment(environment) {
|
|
697
550
|
var cached = dataResources.get(environment);
|
|
698
|
-
|
|
699
551
|
if (cached) {
|
|
700
552
|
return cached;
|
|
701
553
|
}
|
|
702
|
-
|
|
703
554
|
var newDataResource = createFragmentResource(environment);
|
|
704
555
|
dataResources.set(environment, newDataResource);
|
|
705
556
|
return newDataResource;
|
|
706
557
|
}
|
|
707
|
-
|
|
708
558
|
module.exports = {
|
|
709
559
|
createFragmentResource: createFragmentResource,
|
|
710
560
|
getFragmentResourceForEnvironment: getFragmentResourceForEnvironment
|