react-relay 15.0.0 → 16.1.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 (126) hide show
  1. package/ReactRelayContext.js +1 -1
  2. package/ReactRelayQueryFetcher.js.flow +1 -5
  3. package/ReactRelayQueryRenderer.js.flow +9 -36
  4. package/ReactRelayTypes.js.flow +1 -0
  5. package/buildReactRelayContainer.js.flow +3 -1
  6. package/hooks.js +1 -1
  7. package/index.js +1 -1
  8. package/legacy.js +1 -1
  9. package/lib/ReactRelayContainerUtils.js +0 -11
  10. package/lib/ReactRelayContext.js +0 -11
  11. package/lib/ReactRelayFragmentContainer.js +6 -78
  12. package/lib/ReactRelayFragmentMockRenderer.js +0 -11
  13. package/lib/ReactRelayLocalQueryRenderer.js +0 -17
  14. package/lib/ReactRelayPaginationContainer.js +5 -208
  15. package/lib/ReactRelayQueryFetcher.js +2 -51
  16. package/lib/ReactRelayQueryRenderer.js +6 -94
  17. package/lib/ReactRelayQueryRendererContext.js +0 -11
  18. package/lib/ReactRelayRefetchContainer.js +5 -91
  19. package/lib/ReactRelayTestMocker.js +9 -85
  20. package/lib/ReactRelayTypes.js +0 -11
  21. package/lib/RelayContext.js +0 -21
  22. package/lib/assertFragmentMap.js +0 -15
  23. package/lib/buildReactRelayContainer.js +0 -19
  24. package/lib/getRootVariablesForFragments.js +0 -14
  25. package/lib/hooks.js +0 -15
  26. package/lib/index.js +0 -17
  27. package/lib/isRelayEnvironment.js +1 -18
  28. package/lib/jest-react/enqueueTask.js +0 -20
  29. package/lib/jest-react/internalAct.js +0 -38
  30. package/lib/legacy.js +0 -15
  31. package/lib/multi-actor/ActorChange.js +0 -11
  32. package/lib/multi-actor/index.js +0 -11
  33. package/lib/multi-actor/useRelayActorEnvironment.js +0 -11
  34. package/lib/relay-hooks/EntryPointContainer.react.js +0 -11
  35. package/lib/relay-hooks/EntryPointTypes.flow.js +1 -14
  36. package/lib/relay-hooks/FragmentResource.js +76 -132
  37. package/lib/relay-hooks/HooksImplementation.js +1 -12
  38. package/lib/relay-hooks/InternalLogger.js +0 -11
  39. package/lib/relay-hooks/LRUCache.js +0 -22
  40. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +0 -18
  41. package/lib/relay-hooks/MatchContainer.js +0 -94
  42. package/lib/relay-hooks/NestedRelayEntryPointBuilderUtils.js +9 -0
  43. package/lib/relay-hooks/ProfilerContext.js +0 -15
  44. package/lib/relay-hooks/QueryResource.js +2 -68
  45. package/lib/relay-hooks/RelayEnvironmentProvider.js +0 -11
  46. package/lib/relay-hooks/SuspenseResource.js +0 -34
  47. package/lib/relay-hooks/{react-cache/readFragmentInternal_REACT_CACHE.js → experimental/readFragmentInternal_EXPERIMENTAL.js} +5 -29
  48. package/lib/relay-hooks/{react-cache/useFragmentInternal_REACT_CACHE.js → experimental/useFragmentInternal_EXPERIMENTAL.js} +35 -100
  49. package/lib/relay-hooks/{react-cache/useFragment_REACT_CACHE.js → experimental/useFragment_EXPERIMENTAL.js} +1 -16
  50. package/lib/relay-hooks/{react-cache/usePaginationFragment_REACT_CACHE.js → experimental/usePaginationFragment_EXPERIMENTAL.js} +2 -24
  51. package/lib/relay-hooks/{react-cache/useRefetchableFragmentInternal_REACT_CACHE.js → experimental/useRefetchableFragmentInternal_EXPERIMENTAL.js} +14 -98
  52. package/lib/relay-hooks/{react-cache/useRefetchableFragment_REACT_CACHE.js → experimental/useRefetchableFragment_EXPERIMENTAL.js} +1 -15
  53. package/lib/relay-hooks/loadEntryPoint.js +1 -24
  54. package/lib/relay-hooks/loadQuery.js +2 -106
  55. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +2 -27
  56. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +0 -13
  57. package/lib/relay-hooks/useBlockingPaginationFragment.js +0 -42
  58. package/lib/relay-hooks/useClientQuery.js +0 -18
  59. package/lib/relay-hooks/useEntryPointLoader.js +0 -69
  60. package/lib/relay-hooks/useFetchTrackingRef.js +0 -26
  61. package/lib/relay-hooks/useFragment.js +0 -17
  62. package/lib/relay-hooks/useFragmentNode.js +2 -32
  63. package/lib/relay-hooks/useIsMountedRef.js +0 -11
  64. package/lib/relay-hooks/useIsOperationNodeActive.js +0 -11
  65. package/lib/relay-hooks/useIsParentQueryActive.js +0 -11
  66. package/lib/relay-hooks/useLazyLoadQuery.js +0 -18
  67. package/lib/relay-hooks/useLazyLoadQueryNode.js +12 -37
  68. package/lib/relay-hooks/useLoadMoreFunction.js +9 -34
  69. package/lib/relay-hooks/useMemoOperationDescriptor.js +0 -11
  70. package/lib/relay-hooks/useMemoVariables.js +0 -17
  71. package/lib/relay-hooks/useMutation.js +0 -11
  72. package/lib/relay-hooks/usePaginationFragment.js +1 -26
  73. package/lib/relay-hooks/usePreloadedQuery.js +0 -27
  74. package/lib/relay-hooks/useQueryLoader.js +0 -74
  75. package/lib/relay-hooks/useRefetchableFragment.js +0 -16
  76. package/lib/relay-hooks/useRefetchableFragmentNode.js +14 -97
  77. package/lib/relay-hooks/useRelayEnvironment.js +0 -11
  78. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +0 -15
  79. package/lib/relay-hooks/useSubscribeToInvalidationState.js +0 -25
  80. package/lib/relay-hooks/useSubscription.js +0 -15
  81. package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +0 -17
  82. package/package.json +2 -2
  83. package/react-relay-hooks.js +2 -2
  84. package/react-relay-hooks.min.js +2 -2
  85. package/react-relay-legacy.js +2 -2
  86. package/react-relay-legacy.min.js +2 -2
  87. package/react-relay.js +2 -2
  88. package/react-relay.min.js +2 -2
  89. package/relay-hooks/EntryPointContainer.react.js.flow +5 -0
  90. package/relay-hooks/EntryPointTypes.flow.js.flow +34 -35
  91. package/relay-hooks/FragmentResource.js.flow +114 -26
  92. package/relay-hooks/HooksImplementation.js.flow +3 -1
  93. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +4 -2
  94. package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +51 -0
  95. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +7 -5
  96. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +5 -0
  97. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +5 -0
  98. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +2 -0
  99. package/relay-hooks/{react-cache/readFragmentInternal_REACT_CACHE.js.flow → experimental/readFragmentInternal_EXPERIMENTAL.js.flow} +4 -3
  100. package/relay-hooks/{react-cache/useFragmentInternal_REACT_CACHE.js.flow → experimental/useFragmentInternal_EXPERIMENTAL.js.flow} +32 -14
  101. package/relay-hooks/{react-cache/useFragment_REACT_CACHE.js.flow → experimental/useFragment_EXPERIMENTAL.js.flow} +4 -10
  102. package/relay-hooks/{react-cache/usePaginationFragment_REACT_CACHE.js.flow → experimental/usePaginationFragment_EXPERIMENTAL.js.flow} +30 -59
  103. package/relay-hooks/{react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow → experimental/useRefetchableFragmentInternal_EXPERIMENTAL.js.flow} +30 -23
  104. package/relay-hooks/experimental/useRefetchableFragment_EXPERIMENTAL.js.flow +49 -0
  105. package/relay-hooks/loadEntryPoint.js.flow +4 -2
  106. package/relay-hooks/loadQuery.js.flow +21 -1
  107. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +4 -2
  108. package/relay-hooks/useBlockingPaginationFragment.js.flow +10 -17
  109. package/relay-hooks/useClientQuery.js.flow +2 -2
  110. package/relay-hooks/useFragmentNode.js.flow +2 -2
  111. package/relay-hooks/useLazyLoadQueryNode.js.flow +17 -1
  112. package/relay-hooks/useLoadMoreFunction.js.flow +15 -9
  113. package/relay-hooks/useMutation.js.flow +26 -9
  114. package/relay-hooks/usePaginationFragment.js.flow +7 -15
  115. package/relay-hooks/useQueryLoader.js.flow +2 -8
  116. package/relay-hooks/useRefetchableFragment.js.flow +14 -16
  117. package/relay-hooks/useRefetchableFragmentNode.js.flow +33 -20
  118. package/lib/relay-hooks/react-cache/RelayReactCache.js +0 -32
  119. package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +0 -290
  120. package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +0 -49
  121. package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +0 -110
  122. package/relay-hooks/react-cache/RelayReactCache.js.flow +0 -40
  123. package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +0 -430
  124. package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +0 -70
  125. package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +0 -150
  126. package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +0 -65
@@ -1,18 +1,7 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var useStaticFragmentNodeWarning = require('../useStaticFragmentNodeWarning');
15
- var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_REACT_CACHE');
4
+ var useRefetchableFragmentInternal = require('./useRefetchableFragmentInternal_EXPERIMENTAL');
16
5
  var _require = require('react'),
17
6
  useDebugValue = _require.useDebugValue;
18
7
  var _require2 = require('relay-runtime'),
@@ -24,14 +13,11 @@ function useRefetchableFragment(fragmentInput, fragmentRef) {
24
13
  fragmentData = _useRefetchableFragme.fragmentData,
25
14
  refetch = _useRefetchableFragme.refetch;
26
15
  if (process.env.NODE_ENV !== "production") {
27
- // eslint-disable-next-line react-hooks/rules-of-hooks
28
16
  useDebugValue({
29
17
  fragment: fragmentNode.name,
30
18
  data: fragmentData
31
19
  });
32
20
  }
33
- /* $FlowExpectedError[prop-missing] : Exposed options is a subset of internal
34
- * options */
35
21
  return [fragmentData, refetch];
36
22
  }
37
23
  module.exports = useRefetchableFragment;
@@ -1,20 +1,8 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _require = require('./loadQuery'),
15
4
  loadQuery = _require.loadQuery;
16
5
  function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
17
- // Start loading the code for the entrypoint
18
6
  var loadingPromise = null;
19
7
  if (entryPoint.root.getModuleIfRequired() == null) {
20
8
  loadingPromise = entryPoint.root.load();
@@ -34,8 +22,6 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
34
22
  parameters = _queries$queryPropNam.parameters,
35
23
  variables = _queries$queryPropNam.variables;
36
24
  var environment = environmentProvider.getEnvironment(environmentProviderOptions);
37
-
38
- // $FlowFixMe[underconstrained-implicit-instantiation]
39
25
  preloadedQueries[queryPropName] = loadQuery(environment, parameters, variables, {
40
26
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
41
27
  networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig,
@@ -84,18 +70,9 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
84
70
  loadingPromise = (_loadingPromise = loadingPromise) !== null && _loadingPromise !== void 0 ? _loadingPromise : entryPoint.root.load();
85
71
  throw loadingPromise;
86
72
  }
87
-
88
- // On certain platforms, getting an es6 module with a default export from a JSResource will return an object like
89
- // {default: module}, so let's assume that if the "component" has a static property named "default"
90
- // that it's actually an es6 module wrapper, so unwrap it. This won't work for React classes with a static property named "default", but
91
- // that's probably a worthwhile trade-off.
92
- var component =
93
- // $FlowIgnore[prop-missing]
94
- componentModule["default"] != null ? componentModule["default"] : componentModule;
95
- // $FlowFixMe[incompatible-cast] - trust me Flow, its entryPoint component
73
+ var component = componentModule["default"] != null ? componentModule["default"] : componentModule;
96
74
  return component;
97
75
  },
98
- // $FlowFixMe[unsafe-getters-setters] - this has no side effects
99
76
  get isDisposed() {
100
77
  return isDisposed;
101
78
  },
@@ -1,14 +1,3 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
@@ -30,37 +19,18 @@ var fetchKey = 100001;
30
19
  function useTrackLoadQueryInRender() {
31
20
  if (RenderDispatcher === null) {
32
21
  var _React$__SECRET_INTER, _React$__SECRET_INTER2;
33
- // Flow does not know of React internals (rightly so), but we need to
34
- // ensure here that this function isn't called inside render.
35
- RenderDispatcher = // $FlowFixMe[prop-missing]
36
- (_React$__SECRET_INTER = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER === void 0 ? void 0 : (_React$__SECRET_INTER2 = _React$__SECRET_INTER.ReactCurrentDispatcher) === null || _React$__SECRET_INTER2 === void 0 ? void 0 : _React$__SECRET_INTER2.current;
22
+ RenderDispatcher = (_React$__SECRET_INTER = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER === void 0 ? void 0 : (_React$__SECRET_INTER2 = _React$__SECRET_INTER.ReactCurrentDispatcher) === null || _React$__SECRET_INTER2 === void 0 ? void 0 : _React$__SECRET_INTER2.current;
37
23
  }
38
24
  }
39
25
  function loadQuery(environment, preloadableRequest, variables, options, environmentProviderOptions) {
40
26
  var _React$__SECRET_INTER3, _React$__SECRET_INTER4, _options$__nameForWar, _options$fetchPolicy;
41
- // This code ensures that we don't call loadQuery during render.
42
- var CurrentDispatcher = // $FlowFixMe[prop-missing]
43
- (_React$__SECRET_INTER3 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER3 === void 0 ? void 0 : (_React$__SECRET_INTER4 = _React$__SECRET_INTER3.ReactCurrentDispatcher) === null || _React$__SECRET_INTER4 === void 0 ? void 0 : _React$__SECRET_INTER4.current;
27
+ var CurrentDispatcher = (_React$__SECRET_INTER3 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER3 === void 0 ? void 0 : (_React$__SECRET_INTER4 = _React$__SECRET_INTER3.ReactCurrentDispatcher) === null || _React$__SECRET_INTER4 === void 0 ? void 0 : _React$__SECRET_INTER4.current;
44
28
  process.env.NODE_ENV !== "production" ? warning(RenderDispatcher == null || CurrentDispatcher !== RenderDispatcher, 'Relay: `%s` should not be called inside a React render function.', (_options$__nameForWar = options === null || options === void 0 ? void 0 : options.__nameForWarning) !== null && _options$__nameForWar !== void 0 ? _options$__nameForWar : 'loadQuery') : void 0;
45
-
46
- // Every time you call loadQuery, we will generate a new fetchKey.
47
- // This will ensure that every query reference that is created and
48
- // passed to usePreloadedQuery is independently evaluated,
49
- // even if they are for the same query/variables.
50
- // Specifically, we want to avoid a case where we try to refetch a
51
- // query by calling loadQuery a second time, and have the Suspense
52
- // cache in usePreloadedQuery reuse the cached result instead of
53
- // re-evaluating the new query ref and triggering a refetch if
54
- // necessary.
55
29
  fetchKey++;
56
30
  var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'store-or-network';
57
31
  var networkCacheConfig = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options === null || options === void 0 ? void 0 : options.networkCacheConfig), {}, {
58
32
  force: true
59
33
  });
60
-
61
- // executeWithNetworkSource will retain and execute an operation
62
- // against the Relay store, given an Observable that would provide
63
- // the network events for the operation.
64
34
  var retainReference;
65
35
  var didExecuteNetworkSource = false;
66
36
  var executeWithNetworkSource = function executeWithNetworkSource(operation, networkObservable) {
@@ -70,53 +40,18 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
70
40
  source: networkObservable
71
41
  });
72
42
  };
73
-
74
- // N.B. For loadQuery, we unconventionally want to return an Observable
75
- // that isn't lazily executed, meaning that we don't want to wait
76
- // until the returned Observable is subscribed to to actually start
77
- // fetching and executing an operation; i.e. we want to execute the
78
- // operation eagerly, when loadQuery is called.
79
- // For this reason, we use an intermediate executionSubject which
80
- // allows us to capture the events that occur during the eager execution
81
- // of the operation, and then replay them to the Observable we
82
- // ultimately return.
83
43
  var executionSubject = new ReplaySubject();
84
44
  var returnedObservable = Observable.create(function (sink) {
85
45
  return executionSubject.subscribe(sink);
86
46
  });
87
47
  var unsubscribeFromNetworkRequest;
88
48
  var networkError = null;
89
- // makeNetworkRequest will immediately start a raw network request if
90
- // one isn't already in flight and return an Observable that when
91
- // subscribed to will replay the network events that have occured so far,
92
- // as well as subsequent events.
93
49
  var didMakeNetworkRequest = false;
94
50
  var makeNetworkRequest = function makeNetworkRequest(params) {
95
- // N.B. this function is called synchronously or not at all
96
- // didMakeNetworkRequest is safe to rely on in the returned value
97
- // Even if the request gets deduped below, we still wan't to return an
98
- // observable that provides the replayed network events for the query,
99
- // so we set this to true before deduping, to guarantee that the
100
- // `source` observable is returned.
101
51
  didMakeNetworkRequest = true;
102
52
  var observable;
103
53
  var subject = new ReplaySubject();
104
54
  if (RelayFeatureFlags.ENABLE_LOAD_QUERY_REQUEST_DEDUPING === true) {
105
- // Here, we are calling fetchQueryDeduped at the network layer level,
106
- // which ensures that only a single network request is active for a given
107
- // (environment, identifier) pair.
108
- // Since network requests can be started /before/ we have the query ast
109
- // necessary to process the results, we need to dedupe the raw requests
110
- // separately from deduping the operation execution; specifically,
111
- // if `loadQuery` is called multiple times before the query ast is available,
112
- // we still want the network request to be deduped.
113
- // - If a duplicate active network request is found, it will return an
114
- // Observable that replays the events of the already active request.
115
- // - If no duplicate active network request is found, it will call the fetchFn
116
- // to start the request, and return an Observable that will replay
117
- // the events from the network request.
118
- // We provide an extra key to the identifier to distinguish deduping
119
- // of raw network requests vs deduping of operation executions.
120
55
  var identifier = 'raw-network-request-' + getRequestIdentifier(params, variables);
121
56
  observable = fetchQueryDeduped(environment, identifier, function () {
122
57
  var network = environment.getNetwork();
@@ -151,31 +86,8 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
151
86
  var unsubscribeFromExecution;
152
87
  var executeDeduped = function executeDeduped(operation, fetchFn) {
153
88
  if (RelayFeatureFlags.ENABLE_LOAD_QUERY_REQUEST_DEDUPING === true) {
154
- // N.B. at this point, if we're calling execute with a query ast (OperationDescriptor),
155
- // we are guaranteed to have started a network request. We set this to
156
- // true here as well since `makeNetworkRequest` might get skipped in the case
157
- // where the query ast is already available and the query executions get deduped.
158
- // Even if the execution gets deduped below, we still wan't to return
159
- // an observable that provides the replayed network events for the query,
160
- // so we set this to true before deduping, to guarantee that the `source`
161
- // observable is returned.
162
89
  didMakeNetworkRequest = true;
163
90
  }
164
-
165
- // Here, we are calling fetchQueryDeduped, which ensures that only
166
- // a single operation is active for a given (environment, identifier) pair,
167
- // and also tracks the active state of the operation, which is necessary
168
- // for our Suspense infra to later be able to suspend (or not) on
169
- // active operations. Even though we already dedupe raw network requests,
170
- // we also need to dedupe and keep track operation execution for our Suspense
171
- // infra, and we also want to avoid processing responses more than once, for
172
- // the cases where `loadQuery` might be called multiple times after the query ast
173
- // is available.
174
- // - If a duplicate active operation is found, it will return an
175
- // Observable that replays the events of the already active operation.
176
- // - If no duplicate active operation is found, it will call the fetchFn
177
- // to execute the operation, and return an Observable that will provide
178
- // the events for executing the operation.
179
91
  var _fetchQueryDeduped$su = fetchQueryDeduped(environment, operation.request.identifier, fetchFn).subscribe({
180
92
  error: function error(err) {
181
93
  executionSubject.error(err);
@@ -195,15 +107,9 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
195
107
  if (fetchPolicy === 'store-only') {
196
108
  return;
197
109
  }
198
-
199
- // N.B. If the fetch policy allows fulfillment from the store but the
200
- // environment already has the data for that operation cached in the store,
201
- // then we do nothing.
202
110
  var shouldFetch = fetchPolicy !== 'store-or-network' || environment.check(operation).status !== 'available';
203
111
  if (shouldFetch) {
204
112
  executeDeduped(operation, function () {
205
- // N.B. Since we have the operation synchronously available here,
206
- // we can immediately fetch and execute the operation.
207
113
  var networkObservable = makeNetworkRequest(concreteRequest.params);
208
114
  var executeObservable = executeWithNetworkSource(operation, networkObservable);
209
115
  return executeObservable;
@@ -223,15 +129,7 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
223
129
  if (_module != null) {
224
130
  checkAvailabilityAndExecute(_module);
225
131
  } else {
226
- // If the module isn't synchronously available, we launch the
227
- // network request immediately if the fetchPolicy might produce
228
- // a network fetch, regardless of the state of the store cache. We
229
- // do this because we can't check if a query is cached without the
230
- // ast, and we know that if we don't have the query ast
231
- // available, then this query could've never been written to the
232
- // store in the first place, so it couldn't have been cached.
233
132
  var networkObservable = fetchPolicy === 'store-only' ? null : makeNetworkRequest(params);
234
- // $FlowFixMe[method-unbinding] added when improving typing for this parameters
235
133
  var _PreloadableQueryRegi = PreloadableQueryRegistry.onLoad(queryId, function (preloadedModule) {
236
134
  cancelOnLoadCallback();
237
135
  var operation = createOperationDescriptor(preloadedModule, variables, networkCacheConfig);
@@ -289,11 +187,9 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
289
187
  cancelNetworkRequest: cancelNetworkRequest,
290
188
  fetchKey: fetchKey,
291
189
  id: queryId,
292
- // $FlowFixMe[unsafe-getters-setters] - this has no side effects
293
190
  get isDisposed() {
294
191
  return isDisposed || isReleased;
295
192
  },
296
- // $FlowFixMe[unsafe-getters-setters] - this has no side effects
297
193
  get networkError() {
298
194
  return networkError;
299
195
  },
@@ -1,14 +1,3 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
@@ -20,10 +9,7 @@ var _require = require('relay-runtime'),
20
9
  createOperationDescriptor = _require.createOperationDescriptor,
21
10
  getRequest = _require.getRequest,
22
11
  getRequestIdentifier = _require.getRequestIdentifier;
23
-
24
- // Expire results by this delay after they resolve.
25
- var DEFAULT_PREFETCH_TIMEOUT = 30 * 1000; // 30 seconds
26
-
12
+ var DEFAULT_PREFETCH_TIMEOUT = 30 * 1000;
27
13
  var WEAKMAP_SUPPORTED = typeof WeakMap === 'function';
28
14
  var STORE_OR_NETWORK_DEFAULT = 'store-or-network';
29
15
  var pendingQueriesByEnvironment = WEAKMAP_SUPPORTED ? new WeakMap() : new Map();
@@ -33,7 +19,7 @@ function preloadQuery(environment, preloadableRequest, variables, options, envir
33
19
  _pendingQueries = new Map();
34
20
  pendingQueriesByEnvironment.set(environment, _pendingQueries);
35
21
  }
36
- var pendingQueries = _pendingQueries; // store in a const for flow
22
+ var pendingQueries = _pendingQueries;
37
23
  var queryEntry = preloadQueryDeduped(environment, pendingQueries, preloadableRequest, variables, options);
38
24
  var source = queryEntry.kind === 'network' ? Observable.create(function (sink) {
39
25
  var subscription;
@@ -52,8 +38,6 @@ function preloadQuery(environment, preloadableRequest, variables, options, envir
52
38
  return;
53
39
  }
54
40
  setTimeout(function () {
55
- // Clear the cache entry after the default timeout
56
- // null-check for Flow
57
41
  if (queryEntry != null) {
58
42
  cleanup(pendingQueries, queryEntry);
59
43
  }
@@ -115,15 +99,12 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
115
99
  };
116
100
  if (!environment.isServer() && prevQueryEntry == null) {
117
101
  setTimeout(function () {
118
- // Clear the cache entry after the default timeout
119
- // null-check for Flow
120
102
  if (nextQueryEntry != null) {
121
103
  cleanup(pendingQueries, nextQueryEntry);
122
104
  }
123
105
  }, DEFAULT_PREFETCH_TIMEOUT);
124
106
  }
125
107
  } else if (prevQueryEntry == null || prevQueryEntry.kind !== 'network') {
126
- // Should fetch but we're not already fetching: fetch!
127
108
  var source = network.execute(params, variables, networkCacheConfig, null);
128
109
  var subject = new ReplaySubject();
129
110
  nextQueryEntry = {
@@ -144,8 +125,6 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
144
125
  return;
145
126
  }
146
127
  setTimeout(function () {
147
- // Clear the cache entry after the default timeout
148
- // null-check for Flow
149
128
  if (nextQueryEntry != null) {
150
129
  cleanup(pendingQueries, nextQueryEntry);
151
130
  }
@@ -169,10 +148,6 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
169
148
  return nextQueryEntry;
170
149
  }
171
150
  function cleanup(pendingQueries, entry) {
172
- // Reload the entry by its cache key and only invalidate if its the identical
173
- // entry instance. This ensures that if the same query/variables are fetched
174
- // successively that a timeout/expiration from an earlier fetch doesn't clear
175
- // a subsequent fetch.
176
151
  var currentEntry = pendingQueries.get(entry.cacheKey);
177
152
  if (currentEntry != null && currentEntry === entry) {
178
153
  if (currentEntry.kind === 'network') {
@@ -1,21 +1,8 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var preloadQuery = require('./preloadQuery_DEPRECATED');
15
4
  function prepareEntryPoint(environmentProvider, entryPoint, entryPointParams) {
16
- // Start loading the code for the entrypoint
17
5
  if (entryPoint.root.getModuleIfRequired() == null) {
18
- // $FlowFixMe[unused-promise]
19
6
  entryPoint.root.load();
20
7
  }
21
8
  var preloadProps = entryPoint.getPreloadProps(entryPointParams);
@@ -1,14 +1,3 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
@@ -34,7 +23,6 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
34
23
  useStaticFragmentNodeWarning(fragmentNode, "first argument of ".concat(componentDisplayName));
35
24
  var _getPaginationMetadat = getPaginationMetadata(fragmentNode, componentDisplayName),
36
25
  connectionPathInFragmentData = _getPaginationMetadat.connectionPathInFragmentData,
37
- identifierField = _getPaginationMetadat.identifierField,
38
26
  paginationRequest = _getPaginationMetadat.paginationRequest,
39
27
  paginationMetadata = _getPaginationMetadat.paginationMetadata,
40
28
  stream = _getPaginationMetadat.stream;
@@ -46,8 +34,6 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
46
34
  disableStoreUpdates = _useRefetchableFragme.disableStoreUpdates,
47
35
  enableStoreUpdates = _useRefetchableFragme.enableStoreUpdates;
48
36
  var fragmentIdentifier = getFragmentIdentifier(fragmentNode, fragmentRef);
49
-
50
- // Backward pagination
51
37
  var _useLoadMore = useLoadMore({
52
38
  componentDisplayName: componentDisplayName,
53
39
  connectionPathInFragmentData: connectionPathInFragmentData,
@@ -58,15 +44,12 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
58
44
  fragmentIdentifier: fragmentIdentifier,
59
45
  fragmentNode: fragmentNode,
60
46
  fragmentRef: fragmentRef,
61
- identifierField: identifierField,
62
47
  paginationMetadata: paginationMetadata,
63
48
  paginationRequest: paginationRequest
64
49
  }),
65
50
  loadPrevious = _useLoadMore[0],
66
51
  hasPrevious = _useLoadMore[1],
67
52
  disposeFetchPrevious = _useLoadMore[2];
68
-
69
- // Forward pagination
70
53
  var _useLoadMore2 = useLoadMore({
71
54
  componentDisplayName: componentDisplayName,
72
55
  connectionPathInFragmentData: connectionPathInFragmentData,
@@ -77,7 +60,6 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
77
60
  fragmentIdentifier: fragmentIdentifier,
78
61
  fragmentNode: fragmentNode,
79
62
  fragmentRef: fragmentRef,
80
- identifierField: identifierField,
81
63
  paginationMetadata: paginationMetadata,
82
64
  paginationRequest: paginationRequest
83
65
  }),
@@ -92,7 +74,6 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
92
74
  }));
93
75
  }, [disposeFetchNext, disposeFetchPrevious, refetch]);
94
76
  return {
95
- // $FlowFixMe[incompatible-cast]
96
77
  data: fragmentData,
97
78
  loadNext: loadNext,
98
79
  loadPrevious: loadPrevious,
@@ -121,13 +102,7 @@ function useLoadMore(args) {
121
102
  };
122
103
  var observer = {
123
104
  complete: promiseResolve,
124
- // NOTE: loadMore is a no-op if a request is already in flight, so we
125
- // can safely assume that `start` will only be called once while a
126
- // request is in flight.
127
105
  start: function start() {
128
- // NOTE: We disable store updates when we suspend to ensure
129
- // that higher-pri updates from the Relay store don't disrupt
130
- // any Suspense timeouts passed via withSuspenseConfig.
131
106
  disableStoreUpdates();
132
107
  var promise = new Promise(function (resolve) {
133
108
  promiseResolveRef.current = function () {
@@ -138,14 +113,7 @@ function useLoadMore(args) {
138
113
  requestPromiseRef.current = promise;
139
114
  setRequestPromise(promise);
140
115
  },
141
- // NOTE: Since streaming is disallowed with this hook, this means that the
142
- // first payload will always contain the entire next page of items,
143
- // while subsequent paylaods will contain @defer'd payloads.
144
- // This allows us to unsuspend here, on the first payload, and allow
145
- // descendant components to suspend on their respective @defer payloads
146
116
  next: promiseResolve,
147
- // TODO: Handle error; we probably don't want to throw an error
148
- // and blow away the whole list of items.
149
117
  error: promiseResolve
150
118
  };
151
119
  var _useLoadMoreFunction = useLoadMoreFunction((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, loadMoreArgs), {}, {
@@ -155,23 +123,13 @@ function useLoadMore(args) {
155
123
  loadMore = _useLoadMoreFunction[0],
156
124
  hasMore = _useLoadMoreFunction[1],
157
125
  disposeFetch = _useLoadMoreFunction[2];
158
-
159
- // NOTE: To determine if we need to suspend, we check that the promise in
160
- // state is the same as the promise on the ref, which ensures that we
161
- // wont incorrectly suspend on other higher-pri updates before the update
162
- // to suspend has committed.
163
126
  if (requestPromise != null && requestPromise === requestPromiseRef.current) {
164
127
  throw requestPromise;
165
128
  }
166
129
  useEffect(function () {
167
130
  if (requestPromise !== requestPromiseRef.current) {
168
- // NOTE: After suspense pagination has resolved, we re-enable store updates
169
- // for this fragment. This may cause the component to re-render if
170
- // we missed any updates to the fragment data other than the pagination update.
171
131
  enableStoreUpdates();
172
132
  }
173
- // NOTE: We know the identity of enableStoreUpdates wont change
174
- // eslint-disable-next-line react-hooks/exhaustive-deps
175
133
  }, [requestPromise]);
176
134
  return [loadMore, hasMore, disposeFetch];
177
135
  }
@@ -1,27 +1,9 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
15
4
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
5
  var useLazyLoadQuery = require('./useLazyLoadQuery');
17
-
18
- /**
19
- * This hook can be used to render client-only queries.
20
- * These queries are consist of queries for client-only data,
21
- * schematized via local schema extensions and/or Relay resolvers.
22
- */
23
6
  function useClientQuery(gqlQuery, variables, options) {
24
- // $FlowFixMe[incompatible-type] client queries can be used with useLazyLoadQuery, but only with `store-only` policy.
25
7
  var query = gqlQuery;
26
8
  return useLazyLoadQuery(query, variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options), {}, {
27
9
  fetchPolicy: 'store-only'
@@ -1,14 +1,3 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
@@ -27,26 +16,6 @@ var initialNullEntryPointReferenceState = {
27
16
  };
28
17
  function useLoadEntryPoint(environmentProvider, entryPoint, options) {
29
18
  var _options$TEST_ONLY__i, _options$TEST_ONLY__i2, _options$TEST_ONLY__i3, _options$TEST_ONLY__i4;
30
- /**
31
- * We want to always call `entryPointReference.dispose()` for every call to
32
- * `setEntryPointReference(loadEntryPoint(...))` so that no leaks of data in Relay
33
- * stores will occur.
34
- *
35
- * However, a call to `setState(newState)` is not always followed by a commit where
36
- * this value is reflected in the state. Thus, we cannot reliably clean up each ref
37
- * with `useEffect(() => () => entryPointReference.dispose(), [entryPointReference])`.
38
- *
39
- * Instead, we keep track of each call to `loadEntryPoint` in a ref.
40
- * Relying on the fact that if a state change commits, no state changes that were
41
- * initiated prior to the currently committing state change will ever subsequently
42
- * commit, we can safely dispose of all preloaded entry point references
43
- * associated with state changes initiated prior to the currently committing state
44
- * change.
45
- *
46
- * Finally, when the hook unmounts, we also dispose of all remaining uncommitted
47
- * entry point references.
48
- */
49
-
50
19
  useTrackLoadQueryInRender();
51
20
  var initialEntryPointReferenceInternal = (_options$TEST_ONLY__i = options === null || options === void 0 ? void 0 : (_options$TEST_ONLY__i2 = options.TEST_ONLY__initialEntryPointData) === null || _options$TEST_ONLY__i2 === void 0 ? void 0 : _options$TEST_ONLY__i2.entryPointReference) !== null && _options$TEST_ONLY__i !== void 0 ? _options$TEST_ONLY__i : initialNullEntryPointReferenceState;
52
21
  var initialEntryPointParamsInternal = (_options$TEST_ONLY__i3 = options === null || options === void 0 ? void 0 : (_options$TEST_ONLY__i4 = options.TEST_ONLY__initialEntryPointData) === null || _options$TEST_ONLY__i4 === void 0 ? void 0 : _options$TEST_ONLY__i4.entryPointParams) !== null && _options$TEST_ONLY__i3 !== void 0 ? _options$TEST_ONLY__i3 : null;
@@ -78,53 +47,17 @@ function useLoadEntryPoint(environmentProvider, entryPoint, options) {
78
47
  var maybeHiddenOrFastRefresh = useRef(false);
79
48
  useEffect(function () {
80
49
  return function () {
81
- // Attempt to detect if the component was
82
- // hidden (by Offscreen API), or fast refresh occured;
83
- // Only in these situations would the effect cleanup
84
- // for "unmounting" run multiple times, so if
85
- // we are ever able to read this ref with a value
86
- // of true, it means that one of these cases
87
- // has happened.
88
50
  maybeHiddenOrFastRefresh.current = true;
89
51
  };
90
52
  }, []);
91
53
  useEffect(function () {
92
54
  if (maybeHiddenOrFastRefresh.current === true) {
93
- // This block only runs if the component has previously "unmounted"
94
- // due to it being hidden by the Offscreen API, or during fast refresh.
95
- // At this point, the current entryPointReference will have been disposed
96
- // by the previous cleanup, so instead of attempting to
97
- // do our regular commit setup, which would incorrectly leave our
98
- // current entryPointReference disposed, we need to load the entryPoint again
99
- // and force a re-render by calling entryPointLoaderCallback again,
100
- // so that the entryPointReference's queries are correctly re-retained, and
101
- // potentially refetched if necessary.
102
55
  maybeHiddenOrFastRefresh.current = false;
103
56
  if (entryPointReference.kind !== 'NullEntryPointReference' && entryPointParams != null) {
104
57
  entryPointLoaderCallback(entryPointParams);
105
58
  }
106
59
  return;
107
60
  }
108
-
109
- // When a new entryPointReference is committed, we iterate over all
110
- // entrypoint refs in undisposedEntryPointReferences and dispose all of
111
- // the refs that aren't the currently committed one. This ensures
112
- // that we don't leave any dangling entrypoint references for the
113
- // case that loadEntryPoint is called multiple times before commit; when
114
- // this happens, multiple state updates will be scheduled, but only one
115
- // will commit, meaning that we need to keep track of and dispose any
116
- // query references that don't end up committing.
117
- // - We are relying on the fact that sets iterate in insertion order, and we
118
- // can remove items from a set as we iterate over it (i.e. no iterator
119
- // invalidation issues.) Thus, it is safe to loop through
120
- // undisposedEntryPointReferences until we find entryPointReference, and
121
- // remove and dispose all previous references.
122
- // - We are guaranteed to find entryPointReference in the set, because if a
123
- // state change results in a commit, no state changes initiated prior to that
124
- // one will be committed, and we are disposing and removing references
125
- // associated with commits that were initiated prior to the currently
126
- // committing state change. (A useEffect callback is called during the commit
127
- // phase.)
128
61
  var undisposedEntryPointReferences = undisposedEntryPointReferencesRef.current;
129
62
  if (isMountedRef.current) {
130
63
  var _iterator = (0, _createForOfIteratorHelper2["default"])(undisposedEntryPointReferences),
@@ -149,8 +82,6 @@ function useLoadEntryPoint(environmentProvider, entryPoint, options) {
149
82
  }, [entryPointReference, entryPointParams, entryPointLoaderCallback, isMountedRef]);
150
83
  useEffect(function () {
151
84
  return function disposeAllRemainingEntryPointReferences() {
152
- // undisposedEntryPointReferences.current is never reassigned
153
- // eslint-disable-next-line react-hooks/exhaustive-deps
154
85
  var _iterator2 = (0, _createForOfIteratorHelper2["default"])(undisposedEntryPointReferencesRef.current),
155
86
  _step2;
156
87
  try {
@@ -1,33 +1,9 @@
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
- * @format
9
- * @oncall relay
10
- */
11
-
12
1
  'use strict';
13
2
 
14
3
  var useUnsafeRef_DEPRECATED = require('./useUnsafeRef_DEPRECATED');
15
4
  var _require = require('react'),
16
5
  useCallback = _require.useCallback,
17
6
  useEffect = _require.useEffect;
18
-
19
- /**
20
- * This hook returns a mutable React ref that holds the value of whether a
21
- * fetch request is in flight. The reason this is a mutable ref instead of
22
- * state is because we don't actually want to trigger an update when this
23
- * changes, but instead synchronously keep track of whether the network request
24
- * is in flight, for example in order to bail out of a request if one is
25
- * already in flight. If this was state, due to the nature of concurrent
26
- * updates, this value wouldn't be in sync with when the request is actually
27
- * in flight.
28
- * The additional functions returned by this Hook can be used to mutate
29
- * the ref.
30
- */
31
7
  function useFetchTrackingRef() {
32
8
  var subscriptionRef = useUnsafeRef_DEPRECATED(null);
33
9
  var isFetchingRef = useUnsafeRef_DEPRECATED(false);
@@ -46,8 +22,6 @@ function useFetchTrackingRef() {
46
22
  subscriptionRef.current = null;
47
23
  isFetchingRef.current = false;
48
24
  }, []);
49
-
50
- // Dipose of ongoing fetch on unmount
51
25
  useEffect(function () {
52
26
  return disposeFetch;
53
27
  }, [disposeFetch]);