react-relay 14.1.0 → 15.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 +19 -5
- package/ReactRelayQueryRenderer.js.flow +32 -1
- package/ReactRelayQueryRendererContext.js.flow +1 -0
- package/ReactRelayRefetchContainer.js.flow +9 -5
- package/ReactRelayTestMocker.js.flow +3 -1
- package/ReactRelayTypes.js.flow +1 -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 +7 -5
- 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 +2 -2
- package/lib/ReactRelayContext.js +3 -3
- package/lib/ReactRelayFragmentContainer.js +39 -66
- package/lib/ReactRelayFragmentMockRenderer.js +2 -3
- package/lib/ReactRelayLocalQueryRenderer.js +18 -30
- package/lib/ReactRelayPaginationContainer.js +66 -159
- package/lib/ReactRelayQueryFetcher.js +48 -74
- package/lib/ReactRelayQueryRenderer.js +62 -82
- package/lib/ReactRelayQueryRendererContext.js +2 -1
- package/lib/ReactRelayRefetchContainer.js +52 -99
- package/lib/ReactRelayTestMocker.js +32 -66
- package/lib/ReactRelayTypes.js +2 -0
- package/lib/RelayContext.js +4 -6
- package/lib/assertFragmentMap.js +3 -4
- package/lib/buildReactRelayContainer.js +10 -25
- package/lib/getRootVariablesForFragments.js +5 -8
- package/lib/hooks.js +5 -17
- package/lib/index.js +5 -24
- package/lib/isRelayEnvironment.js +5 -3
- package/lib/jest-react/enqueueTask.js +5 -9
- package/lib/jest-react/index.js +0 -1
- package/lib/jest-react/internalAct.js +9 -20
- package/lib/legacy.js +2 -7
- package/lib/multi-actor/ActorChange.js +2 -5
- package/lib/multi-actor/index.js +2 -1
- package/lib/multi-actor/useRelayActorEnvironment.js +4 -7
- package/lib/relay-hooks/EntryPointContainer.react.js +9 -14
- package/lib/relay-hooks/EntryPointTypes.flow.js +5 -2
- package/lib/relay-hooks/FragmentResource.js +102 -196
- package/lib/relay-hooks/HooksImplementation.js +2 -5
- package/lib/relay-hooks/InternalLogger.js +2 -2
- package/lib/relay-hooks/LRUCache.js +2 -19
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +33 -53
- package/lib/relay-hooks/MatchContainer.js +14 -22
- package/lib/relay-hooks/ProfilerContext.js +3 -2
- package/lib/relay-hooks/QueryResource.js +30 -99
- package/lib/relay-hooks/RelayEnvironmentProvider.js +5 -8
- package/lib/relay-hooks/SuspenseResource.js +8 -31
- package/lib/relay-hooks/loadEntryPoint.js +19 -31
- package/lib/relay-hooks/loadQuery.js +41 -77
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -35
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +9 -14
- package/lib/relay-hooks/react-cache/RelayReactCache.js +7 -11
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +24 -78
- package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +23 -56
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +65 -143
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +5 -14
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +17 -23
- package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +73 -74
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +24 -38
- package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +60 -102
- package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +7 -15
- package/lib/relay-hooks/useBlockingPaginationFragment.js +71 -92
- package/lib/relay-hooks/useClientQuery.js +3 -6
- package/lib/relay-hooks/useEntryPointLoader.js +17 -36
- package/lib/relay-hooks/useFetchTrackingRef.js +10 -11
- package/lib/relay-hooks/useFragment.js +8 -18
- package/lib/relay-hooks/useFragmentNode.js +20 -31
- package/lib/relay-hooks/useIsMountedRef.js +4 -5
- package/lib/relay-hooks/useIsOperationNodeActive.js +8 -20
- package/lib/relay-hooks/useIsParentQueryActive.js +3 -6
- package/lib/relay-hooks/useLazyLoadQuery.js +6 -9
- package/lib/relay-hooks/useLazyLoadQueryNode.js +23 -33
- package/lib/relay-hooks/useLoadMoreFunction.js +45 -76
- package/lib/relay-hooks/useMemoOperationDescriptor.js +6 -14
- package/lib/relay-hooks/useMemoVariables.js +15 -33
- package/lib/relay-hooks/useMutation.js +8 -25
- package/lib/relay-hooks/usePaginationFragment.js +61 -76
- package/lib/relay-hooks/usePreloadedQuery.js +12 -29
- package/lib/relay-hooks/useQueryLoader.js +23 -47
- package/lib/relay-hooks/useRefetchableFragment.js +8 -18
- package/lib/relay-hooks/useRefetchableFragmentNode.js +64 -107
- package/lib/relay-hooks/useRelayEnvironment.js +4 -7
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +4 -7
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +8 -8
- package/lib/relay-hooks/useSubscription.js +5 -9
- package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +29 -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 +1 -1
- package/relay-hooks/EntryPointTypes.flow.js.flow +7 -5
- package/relay-hooks/FragmentResource.js.flow +34 -8
- 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 +15 -8
- package/relay-hooks/MatchContainer.js.flow +1 -1
- 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 +2 -2
- 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 +35 -33
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +33 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +18 -18
- package/relay-hooks/__flowtests__/utils.js.flow +13 -2
- package/relay-hooks/loadEntryPoint.js.flow +11 -6
- package/relay-hooks/loadQuery.js.flow +11 -7
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +5 -6
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +13 -8
- 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 +3 -3
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +4 -4
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +1 -1
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
- package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +41 -22
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
- package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +11 -5
- package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +2 -2
- package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -56
- package/relay-hooks/useClientQuery.js.flow +1 -1
- 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 +5 -4
- 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 +14 -9
- package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
- package/relay-hooks/useMemoVariables.js.flow +13 -29
- package/relay-hooks/useMutation.js.flow +4 -4
- package/relay-hooks/usePaginationFragment.js.flow +53 -46
- package/relay-hooks/usePreloadedQuery.js.flow +47 -22
- package/relay-hooks/useQueryLoader.js.flow +85 -22
- package/relay-hooks/useRefetchableFragment.js.flow +64 -33
- package/relay-hooks/useRefetchableFragmentNode.js.flow +10 -4
- 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
|
@@ -5,48 +5,37 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
7
|
*
|
|
8
|
-
* @emails oncall+relay
|
|
9
8
|
* @format
|
|
9
|
+
* @oncall relay
|
|
10
10
|
*/
|
|
11
|
+
|
|
11
12
|
'use strict';
|
|
12
13
|
|
|
13
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
14
|
-
|
|
15
15
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
16
|
-
|
|
17
16
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
18
|
-
|
|
19
17
|
var LRUCache = require('./LRUCache');
|
|
20
|
-
|
|
21
18
|
var SuspenseResource = require('./SuspenseResource');
|
|
22
|
-
|
|
23
19
|
var invariant = require('invariant');
|
|
24
|
-
|
|
25
20
|
var _require = require('relay-runtime'),
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
isPromise = _require.isPromise;
|
|
28
22
|
var warning = require("fbjs/lib/warning");
|
|
29
|
-
|
|
30
23
|
var CACHE_CAPACITY = 1000;
|
|
31
24
|
var DEFAULT_FETCH_POLICY = 'store-or-network';
|
|
25
|
+
var DEFAULT_LIVE_FETCH_POLICY = 'store-and-network';
|
|
32
26
|
var WEAKMAP_SUPPORTED = typeof WeakMap === 'function';
|
|
33
|
-
|
|
34
27
|
function operationIsLiveQuery(operation) {
|
|
35
28
|
return operation.request.node.params.metadata.live !== undefined;
|
|
36
29
|
}
|
|
37
|
-
|
|
38
30
|
function getQueryCacheIdentifier(environment, operation, maybeFetchPolicy, maybeRenderPolicy, cacheBreaker) {
|
|
39
|
-
var fetchPolicy = maybeFetchPolicy !== null && maybeFetchPolicy !== void 0 ? maybeFetchPolicy : DEFAULT_FETCH_POLICY;
|
|
31
|
+
var fetchPolicy = maybeFetchPolicy !== null && maybeFetchPolicy !== void 0 ? maybeFetchPolicy : operationIsLiveQuery(operation) ? DEFAULT_LIVE_FETCH_POLICY : DEFAULT_FETCH_POLICY;
|
|
40
32
|
var renderPolicy = maybeRenderPolicy !== null && maybeRenderPolicy !== void 0 ? maybeRenderPolicy : environment.UNSTABLE_getDefaultRenderPolicy();
|
|
41
33
|
var cacheIdentifier = "".concat(fetchPolicy, "-").concat(renderPolicy, "-").concat(operation.request.identifier);
|
|
42
|
-
|
|
43
34
|
if (cacheBreaker != null) {
|
|
44
35
|
return "".concat(cacheIdentifier, "-").concat(cacheBreaker);
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
return cacheIdentifier;
|
|
48
38
|
}
|
|
49
|
-
|
|
50
39
|
function getQueryResult(operation, cacheIdentifier) {
|
|
51
40
|
var rootFragmentRef = {
|
|
52
41
|
__id: operation.fragment.dataID,
|
|
@@ -60,9 +49,7 @@ function getQueryResult(operation, cacheIdentifier) {
|
|
|
60
49
|
operation: operation
|
|
61
50
|
};
|
|
62
51
|
}
|
|
63
|
-
|
|
64
52
|
var nextID = 200000;
|
|
65
|
-
|
|
66
53
|
function createCacheEntry(cacheIdentifier, operation, operationAvailability, value, networkSubscription, onDispose) {
|
|
67
54
|
var isLiveQuery = operationIsLiveQuery(operation);
|
|
68
55
|
var currentValue = value;
|
|
@@ -77,7 +64,6 @@ function createCacheEntry(cacheIdentifier, operation, operationAvailability, val
|
|
|
77
64
|
if (isLiveQuery && currentNetworkSubscription != null) {
|
|
78
65
|
currentNetworkSubscription.unsubscribe();
|
|
79
66
|
}
|
|
80
|
-
|
|
81
67
|
retention.dispose();
|
|
82
68
|
onDispose(cacheEntry);
|
|
83
69
|
}
|
|
@@ -98,7 +84,6 @@ function createCacheEntry(cacheIdentifier, operation, operationAvailability, val
|
|
|
98
84
|
if (isLiveQuery && currentNetworkSubscription != null) {
|
|
99
85
|
currentNetworkSubscription.unsubscribe();
|
|
100
86
|
}
|
|
101
|
-
|
|
102
87
|
currentNetworkSubscription = subscription;
|
|
103
88
|
},
|
|
104
89
|
temporaryRetain: function temporaryRetain(environment) {
|
|
@@ -113,42 +98,36 @@ function createCacheEntry(cacheIdentifier, operation, operationAvailability, val
|
|
|
113
98
|
};
|
|
114
99
|
return cacheEntry;
|
|
115
100
|
}
|
|
116
|
-
|
|
117
101
|
var QueryResourceImpl = /*#__PURE__*/function () {
|
|
118
102
|
function QueryResourceImpl(environment) {
|
|
119
103
|
var _this = this;
|
|
120
|
-
|
|
121
104
|
(0, _defineProperty2["default"])(this, "_clearCacheEntry", function (cacheEntry) {
|
|
122
105
|
_this._cache["delete"](cacheEntry.cacheIdentifier);
|
|
123
106
|
});
|
|
124
107
|
this._environment = environment;
|
|
125
108
|
this._cache = LRUCache.create(CACHE_CAPACITY);
|
|
126
109
|
}
|
|
127
|
-
|
|
128
110
|
var _proto = QueryResourceImpl.prototype;
|
|
129
|
-
|
|
130
111
|
_proto.prepare = function prepare(operation, fetchObservable, maybeFetchPolicy, maybeRenderPolicy, observer, cacheBreaker, profilerContext) {
|
|
131
112
|
var cacheIdentifier = getQueryCacheIdentifier(this._environment, operation, maybeFetchPolicy, maybeRenderPolicy, cacheBreaker);
|
|
132
113
|
return this.prepareWithIdentifier(cacheIdentifier, operation, fetchObservable, maybeFetchPolicy, maybeRenderPolicy, observer, profilerContext);
|
|
133
114
|
}
|
|
115
|
+
|
|
134
116
|
/**
|
|
135
117
|
* This function should be called during a Component's render function,
|
|
136
118
|
* to either read an existing cached value for the query, or fetch the query
|
|
137
119
|
* and suspend.
|
|
138
|
-
|
|
139
|
-
;
|
|
140
|
-
|
|
120
|
+
*/;
|
|
141
121
|
_proto.prepareWithIdentifier = function prepareWithIdentifier(cacheIdentifier, operation, fetchObservable, maybeFetchPolicy, maybeRenderPolicy, observer, profilerContext) {
|
|
142
122
|
var environment = this._environment;
|
|
143
|
-
var fetchPolicy = maybeFetchPolicy !== null && maybeFetchPolicy !== void 0 ? maybeFetchPolicy : DEFAULT_FETCH_POLICY;
|
|
144
|
-
var renderPolicy = maybeRenderPolicy !== null && maybeRenderPolicy !== void 0 ? maybeRenderPolicy : environment.UNSTABLE_getDefaultRenderPolicy();
|
|
145
|
-
// it's available
|
|
123
|
+
var fetchPolicy = maybeFetchPolicy !== null && maybeFetchPolicy !== void 0 ? maybeFetchPolicy : operationIsLiveQuery(operation) ? DEFAULT_LIVE_FETCH_POLICY : DEFAULT_FETCH_POLICY;
|
|
124
|
+
var renderPolicy = maybeRenderPolicy !== null && maybeRenderPolicy !== void 0 ? maybeRenderPolicy : environment.UNSTABLE_getDefaultRenderPolicy();
|
|
146
125
|
|
|
126
|
+
// 1. Check if there's a cached value for this operation, and reuse it if
|
|
127
|
+
// it's available
|
|
147
128
|
var cacheEntry = this._cache.get(cacheIdentifier);
|
|
148
|
-
|
|
149
129
|
var temporaryRetainDisposable = null;
|
|
150
130
|
var entryWasCached = cacheEntry != null;
|
|
151
|
-
|
|
152
131
|
if (cacheEntry == null) {
|
|
153
132
|
// 2. If a cached value isn't available, try fetching the operation.
|
|
154
133
|
// _fetchAndSaveQuery will update the cache with either a Promise or
|
|
@@ -163,21 +142,19 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
163
142
|
if (temporaryRetainDisposable != null) {
|
|
164
143
|
temporaryRetainDisposable.dispose();
|
|
165
144
|
}
|
|
166
|
-
|
|
167
145
|
var observerUnsubscribe = observer === null || observer === void 0 ? void 0 : observer.unsubscribe;
|
|
168
146
|
observerUnsubscribe && observerUnsubscribe(subscription);
|
|
169
147
|
}
|
|
170
148
|
}));
|
|
171
|
-
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// 3. Temporarily retain here in render phase. When the component reading
|
|
172
152
|
// the operation is committed, we will transfer ownership of data retention
|
|
173
153
|
// to the component.
|
|
174
154
|
// In case the component never commits (mounts or updates) from this render,
|
|
175
155
|
// this data retention hold will auto-release itself after a timeout.
|
|
176
|
-
|
|
177
|
-
|
|
178
156
|
temporaryRetainDisposable = cacheEntry.temporaryRetain(environment);
|
|
179
157
|
var cachedValue = cacheEntry.getValue();
|
|
180
|
-
|
|
181
158
|
if (isPromise(cachedValue)) {
|
|
182
159
|
environment.__log({
|
|
183
160
|
name: 'suspense.query',
|
|
@@ -187,89 +164,72 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
187
164
|
queryAvailability: cacheEntry.operationAvailability,
|
|
188
165
|
renderPolicy: renderPolicy
|
|
189
166
|
});
|
|
190
|
-
|
|
191
167
|
throw cachedValue;
|
|
192
168
|
}
|
|
193
|
-
|
|
194
169
|
if (cachedValue instanceof Error) {
|
|
195
170
|
throw cachedValue;
|
|
196
171
|
}
|
|
197
|
-
|
|
198
172
|
return cachedValue;
|
|
199
173
|
}
|
|
174
|
+
|
|
200
175
|
/**
|
|
201
176
|
* This function should be called during a component's commit phase
|
|
202
177
|
* (e.g. inside useEffect), in order to retain the operation in the Relay store
|
|
203
178
|
* and transfer ownership of the operation to the component lifecycle.
|
|
204
|
-
|
|
205
|
-
;
|
|
206
|
-
|
|
179
|
+
*/;
|
|
207
180
|
_proto.retain = function retain(queryResult, profilerContext) {
|
|
208
181
|
var environment = this._environment;
|
|
209
182
|
var cacheIdentifier = queryResult.cacheIdentifier,
|
|
210
|
-
|
|
211
|
-
|
|
183
|
+
operation = queryResult.operation;
|
|
212
184
|
var cacheEntry = this._getOrCreateCacheEntry(cacheIdentifier, operation, null, queryResult, null);
|
|
213
|
-
|
|
214
185
|
var disposable = cacheEntry.permanentRetain(environment);
|
|
215
|
-
|
|
216
186
|
environment.__log({
|
|
217
187
|
name: 'queryresource.retain',
|
|
218
188
|
profilerContext: profilerContext,
|
|
219
189
|
resourceID: cacheEntry.id
|
|
220
190
|
});
|
|
221
|
-
|
|
222
191
|
return {
|
|
223
192
|
dispose: function dispose() {
|
|
224
193
|
disposable.dispose();
|
|
225
194
|
}
|
|
226
195
|
};
|
|
227
196
|
};
|
|
228
|
-
|
|
229
197
|
_proto.releaseTemporaryRetain = function releaseTemporaryRetain(queryResult) {
|
|
230
198
|
var cacheEntry = this._cache.get(queryResult.cacheIdentifier);
|
|
231
|
-
|
|
232
199
|
if (cacheEntry != null) {
|
|
233
200
|
cacheEntry.releaseTemporaryRetain();
|
|
234
201
|
}
|
|
235
202
|
};
|
|
236
|
-
|
|
237
203
|
_proto.TESTS_ONLY__getCacheEntry = function TESTS_ONLY__getCacheEntry(operation, maybeFetchPolicy, maybeRenderPolicy, cacheBreaker) {
|
|
238
204
|
var environment = this._environment;
|
|
239
205
|
var cacheIdentifier = getQueryCacheIdentifier(environment, operation, maybeFetchPolicy, maybeRenderPolicy, cacheBreaker);
|
|
240
206
|
return this._cache.get(cacheIdentifier);
|
|
241
207
|
};
|
|
242
|
-
|
|
243
208
|
_proto._getOrCreateCacheEntry = function _getOrCreateCacheEntry(cacheIdentifier, operation, operationAvailability, value, networkSubscription) {
|
|
244
209
|
var cacheEntry = this._cache.get(cacheIdentifier);
|
|
245
|
-
|
|
246
210
|
if (cacheEntry == null) {
|
|
247
211
|
cacheEntry = createCacheEntry(cacheIdentifier, operation, operationAvailability, value, networkSubscription, this._clearCacheEntry);
|
|
248
|
-
|
|
249
212
|
this._cache.set(cacheIdentifier, cacheEntry);
|
|
250
213
|
}
|
|
251
|
-
|
|
252
214
|
return cacheEntry;
|
|
253
215
|
};
|
|
254
|
-
|
|
255
216
|
_proto._fetchAndSaveQuery = function _fetchAndSaveQuery(cacheIdentifier, operation, fetchObservable, fetchPolicy, renderPolicy, profilerContext, observer) {
|
|
256
217
|
var _this2 = this;
|
|
218
|
+
var environment = this._environment;
|
|
257
219
|
|
|
258
|
-
|
|
220
|
+
// NOTE: Running `check` will write missing data to the store using any
|
|
259
221
|
// missing data handlers specified on the environment;
|
|
260
222
|
// We run it here first to make the handlers get a chance to populate
|
|
261
223
|
// missing data.
|
|
262
|
-
|
|
263
224
|
var queryAvailability = environment.check(operation);
|
|
264
225
|
var queryStatus = queryAvailability.status;
|
|
265
226
|
var hasFullQuery = queryStatus === 'available';
|
|
266
227
|
var canPartialRender = hasFullQuery || renderPolicy === 'partial' && queryStatus !== 'stale';
|
|
267
228
|
var shouldFetch;
|
|
268
|
-
var shouldAllowRender;
|
|
229
|
+
var shouldAllowRender;
|
|
230
|
+
// Different definitions for Promise in our repos can cause this variable
|
|
269
231
|
// to cause errors when synced elsewhere
|
|
270
|
-
|
|
271
232
|
var resolveNetworkPromise = function resolveNetworkPromise() {};
|
|
272
|
-
|
|
273
233
|
switch (fetchPolicy) {
|
|
274
234
|
case 'store-only':
|
|
275
235
|
{
|
|
@@ -277,21 +237,18 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
277
237
|
shouldAllowRender = true;
|
|
278
238
|
break;
|
|
279
239
|
}
|
|
280
|
-
|
|
281
240
|
case 'store-or-network':
|
|
282
241
|
{
|
|
283
242
|
shouldFetch = !hasFullQuery;
|
|
284
243
|
shouldAllowRender = canPartialRender;
|
|
285
244
|
break;
|
|
286
245
|
}
|
|
287
|
-
|
|
288
246
|
case 'store-and-network':
|
|
289
247
|
{
|
|
290
248
|
shouldFetch = true;
|
|
291
249
|
shouldAllowRender = canPartialRender;
|
|
292
250
|
break;
|
|
293
251
|
}
|
|
294
|
-
|
|
295
252
|
case 'network-only':
|
|
296
253
|
default:
|
|
297
254
|
{
|
|
@@ -299,36 +256,28 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
299
256
|
shouldAllowRender = false;
|
|
300
257
|
break;
|
|
301
258
|
}
|
|
302
|
-
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// NOTE: If this value is false, we will cache a promise for this
|
|
303
262
|
// query, which means we will suspend here at this query root.
|
|
304
263
|
// If it's true, we will cache the query resource and allow rendering to
|
|
305
264
|
// continue.
|
|
306
|
-
|
|
307
|
-
|
|
308
265
|
if (shouldAllowRender) {
|
|
309
266
|
var queryResult = getQueryResult(operation, cacheIdentifier);
|
|
310
|
-
|
|
311
267
|
var _cacheEntry = createCacheEntry(cacheIdentifier, operation, queryAvailability, queryResult, null, this._clearCacheEntry);
|
|
312
|
-
|
|
313
268
|
this._cache.set(cacheIdentifier, _cacheEntry);
|
|
314
269
|
}
|
|
315
|
-
|
|
316
270
|
if (shouldFetch) {
|
|
317
271
|
var _queryResult = getQueryResult(operation, cacheIdentifier);
|
|
318
|
-
|
|
319
272
|
var networkSubscription;
|
|
320
273
|
fetchObservable.subscribe({
|
|
321
274
|
start: function start(subscription) {
|
|
322
275
|
networkSubscription = subscription;
|
|
323
|
-
|
|
324
276
|
var cacheEntry = _this2._cache.get(cacheIdentifier);
|
|
325
|
-
|
|
326
277
|
if (cacheEntry) {
|
|
327
278
|
cacheEntry.setNetworkSubscription(networkSubscription);
|
|
328
279
|
}
|
|
329
|
-
|
|
330
280
|
var observerStart = observer === null || observer === void 0 ? void 0 : observer.start;
|
|
331
|
-
|
|
332
281
|
if (observerStart) {
|
|
333
282
|
var subscriptionWithConditionalCancelation = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, subscription), {}, {
|
|
334
283
|
unsubscribe: function unsubscribe() {
|
|
@@ -343,24 +292,23 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
343
292
|
},
|
|
344
293
|
next: function next() {
|
|
345
294
|
var cacheEntry = _this2._getOrCreateCacheEntry(cacheIdentifier, operation, queryAvailability, _queryResult, networkSubscription);
|
|
346
|
-
|
|
347
295
|
cacheEntry.processedPayloadsCount += 1;
|
|
348
296
|
cacheEntry.setValue(_queryResult);
|
|
349
297
|
resolveNetworkPromise();
|
|
350
298
|
var observerNext = observer === null || observer === void 0 ? void 0 : observer.next;
|
|
351
|
-
|
|
352
299
|
if (observerNext != null) {
|
|
353
300
|
var snapshot = environment.lookup(operation.fragment);
|
|
354
301
|
observerNext(snapshot);
|
|
355
302
|
}
|
|
356
303
|
},
|
|
357
304
|
error: function error(_error) {
|
|
358
|
-
var cacheEntry = _this2._getOrCreateCacheEntry(cacheIdentifier, operation, queryAvailability, _error, networkSubscription);
|
|
305
|
+
var cacheEntry = _this2._getOrCreateCacheEntry(cacheIdentifier, operation, queryAvailability, _error, networkSubscription);
|
|
306
|
+
|
|
307
|
+
// If, this is the first thing we receive for the query,
|
|
359
308
|
// before any other payload handled is error, we will cache and
|
|
360
309
|
// re-throw that error later.
|
|
361
|
-
// We will ignore errors for any incremental payloads we receive.
|
|
362
|
-
|
|
363
310
|
|
|
311
|
+
// We will ignore errors for any incremental payloads we receive.
|
|
364
312
|
if (cacheEntry.processedPayloadsCount === 0) {
|
|
365
313
|
cacheEntry.setValue(_error);
|
|
366
314
|
} else {
|
|
@@ -368,7 +316,6 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
368
316
|
// To complete this task we need to have a way of precisely tracking suspendable points
|
|
369
317
|
process.env.NODE_ENV !== "production" ? warning(false, 'QueryResource: An incremental payload for query `%s` returned an error: `%s`.', operation.fragment.node.name, String(_error.message)) : void 0;
|
|
370
318
|
}
|
|
371
|
-
|
|
372
319
|
resolveNetworkPromise();
|
|
373
320
|
networkSubscription = null;
|
|
374
321
|
cacheEntry.setNetworkSubscription(null);
|
|
@@ -378,40 +325,32 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
378
325
|
complete: function complete() {
|
|
379
326
|
resolveNetworkPromise();
|
|
380
327
|
networkSubscription = null;
|
|
381
|
-
|
|
382
328
|
var cacheEntry = _this2._cache.get(cacheIdentifier);
|
|
383
|
-
|
|
384
329
|
if (cacheEntry) {
|
|
385
330
|
cacheEntry.setNetworkSubscription(null);
|
|
386
331
|
}
|
|
387
|
-
|
|
388
332
|
var observerComplete = observer === null || observer === void 0 ? void 0 : observer.complete;
|
|
389
333
|
observerComplete && observerComplete();
|
|
390
334
|
},
|
|
391
335
|
unsubscribe: observer === null || observer === void 0 ? void 0 : observer.unsubscribe
|
|
392
336
|
});
|
|
393
|
-
|
|
394
337
|
var _cacheEntry2 = this._cache.get(cacheIdentifier);
|
|
395
|
-
|
|
396
338
|
if (!_cacheEntry2) {
|
|
397
339
|
var networkPromise = new Promise(function (resolve) {
|
|
398
340
|
resolveNetworkPromise = resolve;
|
|
399
|
-
});
|
|
341
|
+
});
|
|
400
342
|
|
|
343
|
+
// $FlowExpectedError[prop-missing] Expando to annotate Promises.
|
|
401
344
|
networkPromise.displayName = 'Relay(' + operation.fragment.node.name + ')';
|
|
402
345
|
_cacheEntry2 = createCacheEntry(cacheIdentifier, operation, queryAvailability, networkPromise, networkSubscription, this._clearCacheEntry);
|
|
403
|
-
|
|
404
346
|
this._cache.set(cacheIdentifier, _cacheEntry2);
|
|
405
347
|
}
|
|
406
348
|
} else {
|
|
407
349
|
var observerComplete = observer === null || observer === void 0 ? void 0 : observer.complete;
|
|
408
350
|
observerComplete && observerComplete();
|
|
409
351
|
}
|
|
410
|
-
|
|
411
352
|
var cacheEntry = this._cache.get(cacheIdentifier);
|
|
412
|
-
|
|
413
353
|
!(cacheEntry != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to have cached a result when attempting to fetch query.' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
414
|
-
|
|
415
354
|
environment.__log({
|
|
416
355
|
name: 'queryresource.fetch',
|
|
417
356
|
resourceID: cacheEntry.id,
|
|
@@ -422,31 +361,23 @@ var QueryResourceImpl = /*#__PURE__*/function () {
|
|
|
422
361
|
queryAvailability: queryAvailability,
|
|
423
362
|
shouldFetch: shouldFetch
|
|
424
363
|
});
|
|
425
|
-
|
|
426
364
|
return cacheEntry;
|
|
427
365
|
};
|
|
428
|
-
|
|
429
366
|
return QueryResourceImpl;
|
|
430
367
|
}();
|
|
431
|
-
|
|
432
368
|
function createQueryResource(environment) {
|
|
433
369
|
return new QueryResourceImpl(environment);
|
|
434
370
|
}
|
|
435
|
-
|
|
436
371
|
var dataResources = WEAKMAP_SUPPORTED ? new WeakMap() : new Map();
|
|
437
|
-
|
|
438
372
|
function getQueryResourceForEnvironment(environment) {
|
|
439
373
|
var cached = dataResources.get(environment);
|
|
440
|
-
|
|
441
374
|
if (cached) {
|
|
442
375
|
return cached;
|
|
443
376
|
}
|
|
444
|
-
|
|
445
377
|
var newDataResource = createQueryResource(environment);
|
|
446
378
|
dataResources.set(environment, newDataResource);
|
|
447
379
|
return newDataResource;
|
|
448
380
|
}
|
|
449
|
-
|
|
450
381
|
module.exports = {
|
|
451
382
|
createQueryResource: createQueryResource,
|
|
452
383
|
getQueryResourceForEnvironment: getQueryResourceForEnvironment,
|
|
@@ -4,22 +4,20 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @emails oncall+relay
|
|
8
7
|
*
|
|
9
8
|
* @format
|
|
9
|
+
* @oncall relay
|
|
10
10
|
*/
|
|
11
|
+
|
|
11
12
|
'use strict';
|
|
12
13
|
|
|
14
|
+
var ReactRelayContext = require('./../ReactRelayContext');
|
|
13
15
|
var React = require('react');
|
|
14
|
-
|
|
15
|
-
var ReactRelayContext = require('react-relay/ReactRelayContext');
|
|
16
|
-
|
|
17
16
|
var useMemo = React.useMemo;
|
|
18
|
-
|
|
19
17
|
function RelayEnvironmentProvider(props) {
|
|
20
18
|
var children = props.children,
|
|
21
|
-
|
|
22
|
-
|
|
19
|
+
environment = props.environment,
|
|
20
|
+
getEnvironmentForActor = props.getEnvironmentForActor;
|
|
23
21
|
var context = useMemo(function () {
|
|
24
22
|
return {
|
|
25
23
|
environment: environment,
|
|
@@ -30,5 +28,4 @@ function RelayEnvironmentProvider(props) {
|
|
|
30
28
|
value: context
|
|
31
29
|
}, children);
|
|
32
30
|
}
|
|
33
|
-
|
|
34
31
|
module.exports = RelayEnvironmentProvider;
|
|
@@ -5,125 +5,102 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
7
|
*
|
|
8
|
-
* @emails oncall+relay
|
|
9
8
|
* @format
|
|
9
|
+
* @oncall relay
|
|
10
10
|
*/
|
|
11
|
+
|
|
11
12
|
'use strict';
|
|
12
13
|
|
|
13
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
14
|
-
|
|
15
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
-
|
|
17
16
|
var invariant = require('invariant');
|
|
18
|
-
|
|
19
17
|
var TEMPORARY_RETAIN_DURATION_MS = 5 * 60 * 1000;
|
|
18
|
+
|
|
20
19
|
/**
|
|
21
20
|
* Allows you to retain a resource as part of a component lifecycle accounting
|
|
22
21
|
* for Suspense. You temporarily retain the resource during render, then
|
|
23
22
|
* permanently retain it during commit and release it during unmount.
|
|
24
23
|
*/
|
|
25
|
-
|
|
26
24
|
var SuspenseResource = /*#__PURE__*/function () {
|
|
27
25
|
function SuspenseResource(retain) {
|
|
28
26
|
var _this = this;
|
|
29
|
-
|
|
30
27
|
(0, _defineProperty2["default"])(this, "_retainCount", 0);
|
|
31
28
|
(0, _defineProperty2["default"])(this, "_retainDisposable", null);
|
|
32
29
|
(0, _defineProperty2["default"])(this, "_releaseTemporaryRetain", null);
|
|
33
|
-
|
|
34
30
|
this._retain = function (environment) {
|
|
35
31
|
_this._retainCount++;
|
|
36
|
-
|
|
37
32
|
if (_this._retainCount === 1) {
|
|
38
33
|
_this._retainDisposable = retain(environment);
|
|
39
34
|
}
|
|
40
|
-
|
|
41
35
|
return {
|
|
42
36
|
dispose: function dispose() {
|
|
43
37
|
_this._retainCount = Math.max(0, _this._retainCount - 1);
|
|
44
|
-
|
|
45
38
|
if (_this._retainCount === 0) {
|
|
46
39
|
!(_this._retainDisposable != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected disposable to release query to be defined.' + "If you're seeing this, this is likely a bug in Relay.") : invariant(false) : void 0;
|
|
47
|
-
|
|
48
40
|
_this._retainDisposable.dispose();
|
|
49
|
-
|
|
50
41
|
_this._retainDisposable = null;
|
|
51
42
|
}
|
|
52
43
|
}
|
|
53
44
|
};
|
|
54
45
|
};
|
|
55
46
|
}
|
|
56
|
-
|
|
57
47
|
var _proto = SuspenseResource.prototype;
|
|
58
|
-
|
|
59
48
|
_proto.temporaryRetain = function temporaryRetain(environment) {
|
|
60
49
|
var _this2 = this;
|
|
61
|
-
|
|
62
50
|
var _this$_releaseTempora;
|
|
63
|
-
|
|
64
51
|
// If we're executing in a server environment, there's no need
|
|
65
52
|
// to create temporary retains, since the component will never commit.
|
|
66
53
|
if (environment.isServer()) {
|
|
67
54
|
return {
|
|
68
55
|
dispose: function dispose() {}
|
|
69
56
|
};
|
|
70
|
-
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// temporaryRetain is called during the render phase. However,
|
|
71
60
|
// given that we can't tell if this render will eventually commit or not,
|
|
72
61
|
// we create a timer to autodispose of this retain in case the associated
|
|
73
62
|
// component never commits.
|
|
74
63
|
// If the component /does/ commit, permanentRetain will clear this timeout
|
|
75
64
|
// and permanently retain the data.
|
|
76
|
-
|
|
77
|
-
|
|
78
65
|
var retention = this._retain(environment);
|
|
79
|
-
|
|
80
66
|
var releaseQueryTimeout = null;
|
|
81
|
-
|
|
82
67
|
var releaseTemporaryRetain = function releaseTemporaryRetain() {
|
|
83
68
|
clearTimeout(releaseQueryTimeout);
|
|
84
69
|
releaseQueryTimeout = null;
|
|
85
70
|
_this2._releaseTemporaryRetain = null;
|
|
86
71
|
retention.dispose();
|
|
87
72
|
};
|
|
73
|
+
releaseQueryTimeout = setTimeout(releaseTemporaryRetain, TEMPORARY_RETAIN_DURATION_MS);
|
|
88
74
|
|
|
89
|
-
|
|
75
|
+
// NOTE: Since temporaryRetain can be called multiple times, we release
|
|
90
76
|
// the previous temporary retain after we re-establish a new one, since
|
|
91
77
|
// we only ever need a single temporary retain until the permanent retain is
|
|
92
78
|
// established.
|
|
93
79
|
// temporaryRetain may be called multiple times by React during the render
|
|
94
80
|
// phase, as well as multiple times by other query components that are
|
|
95
81
|
// rendering the same query/variables.
|
|
96
|
-
|
|
97
82
|
(_this$_releaseTempora = this._releaseTemporaryRetain) === null || _this$_releaseTempora === void 0 ? void 0 : _this$_releaseTempora.call(this);
|
|
98
83
|
this._releaseTemporaryRetain = releaseTemporaryRetain;
|
|
99
84
|
return {
|
|
100
85
|
dispose: function dispose() {
|
|
101
86
|
var _this$_releaseTempora2;
|
|
102
|
-
|
|
103
87
|
(_this$_releaseTempora2 = _this2._releaseTemporaryRetain) === null || _this$_releaseTempora2 === void 0 ? void 0 : _this$_releaseTempora2.call(_this2);
|
|
104
88
|
}
|
|
105
89
|
};
|
|
106
90
|
};
|
|
107
|
-
|
|
108
91
|
_proto.permanentRetain = function permanentRetain(environment) {
|
|
109
92
|
var disposable = this._retain(environment);
|
|
110
|
-
|
|
111
93
|
this.releaseTemporaryRetain();
|
|
112
94
|
return disposable;
|
|
113
95
|
};
|
|
114
|
-
|
|
115
96
|
_proto.releaseTemporaryRetain = function releaseTemporaryRetain() {
|
|
116
97
|
var _this$_releaseTempora3;
|
|
117
|
-
|
|
118
98
|
(_this$_releaseTempora3 = this._releaseTemporaryRetain) === null || _this$_releaseTempora3 === void 0 ? void 0 : _this$_releaseTempora3.call(this);
|
|
119
99
|
this._releaseTemporaryRetain = null;
|
|
120
100
|
};
|
|
121
|
-
|
|
122
101
|
_proto.getRetainCount = function getRetainCount() {
|
|
123
102
|
return this._retainCount;
|
|
124
103
|
};
|
|
125
|
-
|
|
126
104
|
return SuspenseResource;
|
|
127
105
|
}();
|
|
128
|
-
|
|
129
106
|
module.exports = SuspenseResource;
|