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