react-relay 20.1.1 → 21.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 (129) hide show
  1. package/ReactRelayContext.js +1 -1
  2. package/ReactRelayContext.js.flow +2 -2
  3. package/ReactRelayFragmentContainer.js.flow +8 -9
  4. package/ReactRelayLocalQueryRenderer.js.flow +11 -3
  5. package/ReactRelayLoggingContext.js.flow +3 -3
  6. package/ReactRelayPaginationContainer.js.flow +31 -24
  7. package/ReactRelayQueryFetcher.js.flow +1 -1
  8. package/ReactRelayQueryRenderer.js.flow +2 -2
  9. package/ReactRelayQueryRendererContext.js.flow +2 -2
  10. package/ReactRelayRefetchContainer.js.flow +17 -14
  11. package/ReactRelayTestMocker.js.flow +10 -10
  12. package/ReactRelayTypes.js.flow +18 -20
  13. package/RelayContext.js.flow +3 -3
  14. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +11 -11
  15. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +5 -5
  16. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +5 -5
  17. package/__flowtests__/RelayModern-flowtest.js.flow +24 -27
  18. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -1
  19. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -4
  20. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -4
  21. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +9 -10
  22. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +4 -5
  23. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +9 -10
  24. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +4 -5
  25. package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +3 -4
  26. package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +3 -4
  27. package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -4
  28. package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +5 -6
  29. package/buildReactRelayContainer.js.flow +4 -4
  30. package/getRootVariablesForFragments.js.flow +1 -1
  31. package/hooks.js +1 -1
  32. package/hooks.js.flow +23 -8
  33. package/index.js +1 -1
  34. package/index.js.flow +40 -14
  35. package/isRelayEnvironment.js.flow +1 -1
  36. package/jest-react/internalAct.js.flow +1 -1
  37. package/legacy.js +1 -1
  38. package/legacy.js.flow +32 -13
  39. package/lib/ReactRelayFragmentContainer.js +1 -1
  40. package/lib/ReactRelayPaginationContainer.js +8 -8
  41. package/lib/ReactRelayRefetchContainer.js +8 -8
  42. package/lib/ReactRelayTestMocker.js +5 -5
  43. package/lib/hooks.js +18 -8
  44. package/lib/index.js +30 -14
  45. package/lib/legacy.js +26 -13
  46. package/lib/relay-hooks/legacy/useBlockingPaginationFragment.js +5 -5
  47. package/lib/relay-hooks/legacy/useRefetchableFragmentNode.js +34 -34
  48. package/lib/relay-hooks/loadEntryPoint.js +2 -2
  49. package/lib/relay-hooks/loadQuery.js +14 -14
  50. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -10
  51. package/lib/relay-hooks/readFragmentInternal.js +6 -6
  52. package/lib/relay-hooks/rsc/serverFetchQuery.js +20 -0
  53. package/lib/relay-hooks/rsc/serverPreloadQuery.js +31 -0
  54. package/lib/relay-hooks/rsc/serverReadFragment.js +15 -0
  55. package/lib/relay-hooks/rsc/useQueryFromServer.js +62 -0
  56. package/lib/relay-hooks/useFragmentInternal_CURRENT.js +49 -25
  57. package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +81 -44
  58. package/lib/relay-hooks/useLazyLoadQueryNode.js +32 -19
  59. package/lib/relay-hooks/useMutation.js +6 -14
  60. package/lib/relay-hooks/useMutationAction_EXPERIMENTAL.js +26 -0
  61. package/lib/relay-hooks/usePreloadedQuery.js +52 -47
  62. package/lib/relay-hooks/useQueryLoader.js +2 -2
  63. package/lib/relay-hooks/useQueryLoader_EXPERIMENTAL.js +2 -2
  64. package/lib/relay-hooks/useRefetchableFragmentInternal.js +31 -31
  65. package/lib/rsc-client_EXPERIMENTAL.js +7 -0
  66. package/lib/rsc_EXPERIMENTAL.js +43 -0
  67. package/multi-actor/ActorChange.js.flow +1 -1
  68. package/package.json +3 -2
  69. package/relay-hooks/EntryPointContainer.react.js.flow +6 -6
  70. package/relay-hooks/EntryPointTypes.flow.js.flow +61 -67
  71. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +23 -21
  72. package/relay-hooks/MatchContainer.js.flow +12 -6
  73. package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +3 -9
  74. package/relay-hooks/QueryResource.js.flow +6 -6
  75. package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
  76. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +6 -6
  77. package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +48 -1
  78. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -9
  79. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -4
  80. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +5 -6
  81. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +27 -32
  82. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +25 -25
  83. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +26 -32
  84. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +23 -30
  85. package/relay-hooks/__flowtests__/utils.js.flow +4 -4
  86. package/relay-hooks/getConnectionState.js.flow +2 -2
  87. package/relay-hooks/legacy/FragmentResource.js.flow +13 -13
  88. package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +24 -25
  89. package/relay-hooks/legacy/useFragmentNode.js.flow +4 -4
  90. package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +79 -81
  91. package/relay-hooks/loadEntryPoint.js.flow +15 -13
  92. package/relay-hooks/loadQuery.js.flow +18 -18
  93. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +16 -13
  94. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -7
  95. package/relay-hooks/readFragmentInternal.js.flow +9 -9
  96. package/relay-hooks/rsc/serverFetchQuery.js.flow +31 -0
  97. package/relay-hooks/rsc/serverPreloadQuery.js.flow +69 -0
  98. package/relay-hooks/rsc/serverReadFragment.js.flow +33 -0
  99. package/relay-hooks/rsc/useQueryFromServer.js.flow +135 -0
  100. package/relay-hooks/useClientQuery.js.flow +2 -2
  101. package/relay-hooks/useEntryPointLoader.js.flow +11 -11
  102. package/relay-hooks/useFragment.js.flow +7 -7
  103. package/relay-hooks/useFragmentInternal.js.flow +1 -1
  104. package/relay-hooks/useFragmentInternal_CURRENT.js.flow +54 -22
  105. package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +95 -46
  106. package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
  107. package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
  108. package/relay-hooks/useLazyLoadQuery.js.flow +10 -3
  109. package/relay-hooks/useLazyLoadQueryNode.js.flow +67 -28
  110. package/relay-hooks/useLoadMoreFunction.js.flow +7 -6
  111. package/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js.flow +5 -5
  112. package/relay-hooks/useMemoVariables.js.flow +1 -1
  113. package/relay-hooks/useMutation.js.flow +8 -16
  114. package/relay-hooks/useMutationAction_EXPERIMENTAL.js.flow +68 -0
  115. package/relay-hooks/usePaginationFragment.js.flow +15 -11
  116. package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +19 -18
  117. package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +19 -18
  118. package/relay-hooks/usePreloadedQuery.js.flow +119 -85
  119. package/relay-hooks/useQueryLoader.js.flow +27 -23
  120. package/relay-hooks/useQueryLoader_EXPERIMENTAL.js.flow +10 -10
  121. package/relay-hooks/useRefetchableFragment.js.flow +16 -11
  122. package/relay-hooks/useRefetchableFragmentInternal.js.flow +77 -79
  123. package/relay-hooks/useRelayLoggingContext.js.flow +1 -1
  124. package/relay-hooks/useSubscribeToInvalidationState.js.flow +1 -1
  125. package/relay-hooks/useSubscription.js.flow +1 -1
  126. package/rsc-client_EXPERIMENTAL.js +10 -0
  127. package/rsc-client_EXPERIMENTAL.js.flow +23 -0
  128. package/rsc_EXPERIMENTAL.js +10 -0
  129. package/rsc_EXPERIMENTAL.js.flow +90 -0
package/lib/legacy.js CHANGED
@@ -7,21 +7,34 @@ var ReactRelayPaginationContainer = require('./ReactRelayPaginationContainer');
7
7
  var ReactRelayQueryRenderer = require('./ReactRelayQueryRenderer');
8
8
  var ReactRelayRefetchContainer = require('./ReactRelayRefetchContainer');
9
9
  var RelayRuntime = require('relay-runtime');
10
+ var ConnectionHandler = RelayRuntime.ConnectionHandler,
11
+ MutationTypes = RelayRuntime.MutationTypes,
12
+ RangeOperations = RelayRuntime.RangeOperations,
13
+ applyOptimisticMutation = RelayRuntime.applyOptimisticMutation,
14
+ commitLocalUpdate = RelayRuntime.commitLocalUpdate,
15
+ commitMutation = RelayRuntime.commitMutation,
16
+ fetchQuery_DEPRECATED = RelayRuntime.fetchQuery_DEPRECATED,
17
+ graphql = RelayRuntime.graphql,
18
+ readInlineData = RelayRuntime.readInlineData,
19
+ requestSubscription = RelayRuntime.requestSubscription;
20
+ var createFragmentContainer = ReactRelayFragmentContainer.createContainer;
21
+ var createPaginationContainer = ReactRelayPaginationContainer.createContainer;
22
+ var createRefetchContainer = ReactRelayRefetchContainer.createContainer;
10
23
  module.exports = {
11
- ConnectionHandler: RelayRuntime.ConnectionHandler,
24
+ ConnectionHandler: ConnectionHandler,
12
25
  QueryRenderer: ReactRelayQueryRenderer,
13
26
  LocalQueryRenderer: ReactRelayLocalQueryRenderer,
14
- MutationTypes: RelayRuntime.MutationTypes,
15
- RangeOperations: RelayRuntime.RangeOperations,
27
+ MutationTypes: MutationTypes,
28
+ RangeOperations: RangeOperations,
16
29
  ReactRelayContext: ReactRelayContext,
17
- applyOptimisticMutation: RelayRuntime.applyOptimisticMutation,
18
- commitLocalUpdate: RelayRuntime.commitLocalUpdate,
19
- commitMutation: RelayRuntime.commitMutation,
20
- createFragmentContainer: ReactRelayFragmentContainer.createContainer,
21
- createPaginationContainer: ReactRelayPaginationContainer.createContainer,
22
- createRefetchContainer: ReactRelayRefetchContainer.createContainer,
23
- fetchQuery_DEPRECATED: RelayRuntime.fetchQuery_DEPRECATED,
24
- graphql: RelayRuntime.graphql,
25
- readInlineData: RelayRuntime.readInlineData,
26
- requestSubscription: RelayRuntime.requestSubscription
30
+ applyOptimisticMutation: applyOptimisticMutation,
31
+ commitLocalUpdate: commitLocalUpdate,
32
+ commitMutation: commitMutation,
33
+ createFragmentContainer: createFragmentContainer,
34
+ createPaginationContainer: createPaginationContainer,
35
+ createRefetchContainer: createRefetchContainer,
36
+ fetchQuery_DEPRECATED: fetchQuery_DEPRECATED,
37
+ graphql: graphql,
38
+ readInlineData: readInlineData,
39
+ requestSubscription: requestSubscription
27
40
  };
@@ -75,10 +75,10 @@ function useBlockingPaginationFragment(fragmentInput, parentFragmentRef) {
75
75
  }, [disposeFetchNext, disposeFetchPrevious, refetch]);
76
76
  return {
77
77
  data: fragmentData,
78
- loadNext: loadNext,
79
- loadPrevious: loadPrevious,
80
78
  hasNext: hasNext,
81
79
  hasPrevious: hasPrevious,
80
+ loadNext: loadNext,
81
+ loadPrevious: loadPrevious,
82
82
  refetch: refetchPagination
83
83
  };
84
84
  }
@@ -102,6 +102,8 @@ function useLoadMore(args) {
102
102
  };
103
103
  var observer = {
104
104
  complete: promiseResolve,
105
+ error: promiseResolve,
106
+ next: promiseResolve,
105
107
  start: function start() {
106
108
  disableStoreUpdates();
107
109
  var promise = new Promise(function (resolve) {
@@ -112,9 +114,7 @@ function useLoadMore(args) {
112
114
  });
113
115
  requestPromiseRef.current = promise;
114
116
  setRequestPromise(promise);
115
- },
116
- next: promiseResolve,
117
- error: promiseResolve
117
+ }
118
118
  };
119
119
  var _useLoadMoreFunction = useLoadMoreFunction((0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, loadMoreArgs), {}, {
120
120
  observer: observer,
@@ -94,9 +94,9 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
94
94
  identifierInfo = _getRefetchMetadata2.identifierInfo;
95
95
  if (shouldReset) {
96
96
  dispatch({
97
- type: 'reset',
98
97
  environment: environment,
99
- fragmentIdentifier: fragmentIdentifier
98
+ fragmentIdentifier: fragmentIdentifier,
99
+ type: 'reset'
100
100
  });
101
101
  disposeQuery();
102
102
  } else if (refetchQuery != null && queryRef != null) {
@@ -110,13 +110,13 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
110
110
  var fetchObservable = queryRef.source != null ? queryRef.source : fetchQuery(environment, refetchQuery);
111
111
  var queryResult = profilerContext.wrapPrepareQueryResource(function () {
112
112
  return QueryResource.prepare(refetchQuery, fetchObservable, fetchPolicy, renderPolicy, {
113
- error: handleQueryCompleted,
114
113
  complete: function complete() {
115
114
  if (process.env.NODE_ENV !== "production") {
116
115
  debugFunctions.checkSameTypeAfterRefetch(debugPreviousIDAndTypename, environment, fragmentNode, componentDisplayName);
117
116
  }
118
117
  handleQueryCompleted();
119
- }
118
+ },
119
+ error: handleQueryCompleted
120
120
  }, queryRef.fetchKey, profilerContext);
121
121
  });
122
122
  var queryData = FragmentResource.read(queryResult.fragmentNode, queryResult.fragmentRef, componentDisplayName).data;
@@ -133,11 +133,11 @@ function useRefetchableFragmentNode(fragmentNode, parentFragmentRef, componentDi
133
133
  enableStoreUpdates = _useFragmentNode.enableStoreUpdates;
134
134
  var refetch = useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragmentData, fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, identifierInfo, loadQuery, parentFragmentRef, refetchableRequest);
135
135
  return {
136
+ disableStoreUpdates: disableStoreUpdates,
137
+ enableStoreUpdates: enableStoreUpdates,
136
138
  fragmentData: fragmentData,
137
139
  fragmentRef: fragmentRef,
138
- refetch: refetch,
139
- disableStoreUpdates: disableStoreUpdates,
140
- enableStoreUpdates: enableStoreUpdates
140
+ refetch: refetch
141
141
  };
142
142
  }
143
143
  function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragmentData, fragmentIdentifier, fragmentNode, fragmentRefPathInResponse, identifierInfo, loadQuery, parentFragmentRef, refetchableRequest) {
@@ -182,17 +182,17 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
182
182
  force: true
183
183
  });
184
184
  loadQuery(refetchQuery.request.variables, {
185
- fetchPolicy: fetchPolicy,
186
185
  __environment: refetchEnvironment,
187
- __nameForWarning: 'refetch'
186
+ __nameForWarning: 'refetch',
187
+ fetchPolicy: fetchPolicy
188
188
  });
189
189
  dispatch({
190
- type: 'refetch',
191
190
  fetchPolicy: fetchPolicy,
192
191
  onComplete: onComplete,
193
192
  refetchEnvironment: refetchEnvironment,
194
193
  refetchQuery: refetchQuery,
195
- renderPolicy: renderPolicy
194
+ renderPolicy: renderPolicy,
195
+ type: 'refetch'
196
196
  });
197
197
  return {
198
198
  dispose: disposeQuery
@@ -202,23 +202,16 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
202
202
  var debugFunctions;
203
203
  if (process.env.NODE_ENV !== "production") {
204
204
  debugFunctions = {
205
- getInitialIDAndType: function getInitialIDAndType(memoRefetchVariables, fragmentRefPathInResponse, identifierQueryVariableName, environment) {
206
- var _require5 = require('relay-runtime'),
207
- Record = _require5.Record;
208
- var id = memoRefetchVariables === null || memoRefetchVariables === void 0 ? void 0 : memoRefetchVariables[identifierQueryVariableName !== null && identifierQueryVariableName !== void 0 ? identifierQueryVariableName : 'id'];
209
- if (fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || id == null) {
210
- return null;
205
+ checkSameIDAfterRefetch: function checkSameIDAfterRefetch(previousIDAndTypename, refetchedFragmentRef, fragmentNode, componentDisplayName) {
206
+ if (previousIDAndTypename == null || refetchedFragmentRef == null) {
207
+ return;
211
208
  }
212
- var recordSource = environment.getStore().getSource();
213
- var record = recordSource.get(id);
214
- var typename = record == null ? null : Record.getType(record);
215
- if (typename == null) {
216
- return null;
209
+ var _require5 = require('relay-runtime'),
210
+ ID_KEY = _require5.ID_KEY;
211
+ var resultID = refetchedFragmentRef[ID_KEY];
212
+ if (resultID != null && resultID !== previousIDAndTypename.id) {
213
+ process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned a different id, expected ' + '`%s`, got `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements ' + 'unique id requirement.', resultID, previousIDAndTypename.id, fragmentNode.name, componentDisplayName) : void 0;
217
214
  }
218
- return {
219
- id: id,
220
- typename: typename
221
- };
222
215
  },
223
216
  checkSameTypeAfterRefetch: function checkSameTypeAfterRefetch(previousIDAndType, environment, fragmentNode, componentDisplayName) {
224
217
  var _require6 = require('relay-runtime'),
@@ -233,16 +226,23 @@ if (process.env.NODE_ENV !== "production") {
233
226
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned data with a different ' + '__typename: was `%s`, now `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements' + 'unique id requirement.', previousIDAndType.typename, typename, fragmentNode.name, componentDisplayName) : void 0;
234
227
  }
235
228
  },
236
- checkSameIDAfterRefetch: function checkSameIDAfterRefetch(previousIDAndTypename, refetchedFragmentRef, fragmentNode, componentDisplayName) {
237
- if (previousIDAndTypename == null || refetchedFragmentRef == null) {
238
- return;
239
- }
229
+ getInitialIDAndType: function getInitialIDAndType(memoRefetchVariables, fragmentRefPathInResponse, identifierQueryVariableName, environment) {
240
230
  var _require7 = require('relay-runtime'),
241
- ID_KEY = _require7.ID_KEY;
242
- var resultID = refetchedFragmentRef[ID_KEY];
243
- if (resultID != null && resultID !== previousIDAndTypename.id) {
244
- process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned a different id, expected ' + '`%s`, got `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements ' + 'unique id requirement.', resultID, previousIDAndTypename.id, fragmentNode.name, componentDisplayName) : void 0;
231
+ Record = _require7.Record;
232
+ var id = memoRefetchVariables === null || memoRefetchVariables === void 0 ? void 0 : memoRefetchVariables[identifierQueryVariableName !== null && identifierQueryVariableName !== void 0 ? identifierQueryVariableName : 'id'];
233
+ if (fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || id == null) {
234
+ return null;
245
235
  }
236
+ var recordSource = environment.getStore().getSource();
237
+ var record = recordSource.get(id);
238
+ var typename = record == null ? null : Record.getType(record);
239
+ if (typename == null) {
240
+ return null;
241
+ }
242
+ return {
243
+ id: id,
244
+ typename: typename
245
+ };
246
246
  }
247
247
  };
248
248
  }
@@ -29,9 +29,9 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
29
29
  }
30
30
  var environment = environmentProvider.getEnvironment(environmentProviderOptions);
31
31
  preloadedQueries[queryPropName] = loadQuery(environment, parameters, variables, {
32
+ __nameForWarning: 'loadEntryPoint',
32
33
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
33
- networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig,
34
- __nameForWarning: 'loadEntryPoint'
34
+ networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig
35
35
  }, environmentProviderOptions);
36
36
  });
37
37
  }
@@ -44,15 +44,15 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
44
44
  return network.execute(params, variables, networkCacheConfig, undefined, undefined, undefined, undefined, checkOperation);
45
45
  });
46
46
  var _observable$subscribe = observable.subscribe({
47
+ complete: function complete() {
48
+ subject.complete();
49
+ },
47
50
  error: function error(err) {
48
51
  networkError = err;
49
52
  subject.error(err);
50
53
  },
51
54
  next: function next(data) {
52
55
  subject.next(data);
53
- },
54
- complete: function complete() {
55
- subject.complete();
56
56
  }
57
57
  }),
58
58
  unsubscribe = _observable$subscribe.unsubscribe;
@@ -69,14 +69,14 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
69
69
  var executeDeduped = function executeDeduped(operation, fetchFn) {
70
70
  didMakeNetworkRequest = true;
71
71
  var _fetchQueryDeduped$su = fetchQueryDeduped(environment, operation.request.identifier, fetchFn).subscribe({
72
+ complete: function complete() {
73
+ executionSubject.complete();
74
+ },
72
75
  error: function error(err) {
73
76
  executionSubject.error(err);
74
77
  },
75
78
  next: function next(data) {
76
79
  executionSubject.next(data);
77
- },
78
- complete: function complete() {
79
- executionSubject.complete();
80
80
  }
81
81
  });
82
82
  unsubscribeFromExecution = _fetchQueryDeduped$su.unsubscribe;
@@ -154,9 +154,7 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
154
154
  isNetworkRequestCancelled = true;
155
155
  };
156
156
  return {
157
- kind: 'PreloadedQuery',
158
- environment: environment,
159
- environmentProviderOptions: environmentProviderOptions,
157
+ cancelNetworkRequest: cancelNetworkRequest,
160
158
  dispose: function dispose() {
161
159
  if (isDisposed) {
162
160
  return;
@@ -165,19 +163,21 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
165
163
  cancelNetworkRequest();
166
164
  isDisposed = true;
167
165
  },
168
- releaseQuery: releaseQuery,
169
- cancelNetworkRequest: cancelNetworkRequest,
166
+ environment: environment,
167
+ environmentProviderOptions: environmentProviderOptions,
170
168
  fetchKey: fetchKey,
169
+ fetchPolicy: fetchPolicy,
171
170
  id: queryId,
172
171
  get isDisposed() {
173
172
  return isDisposed || isReleased;
174
173
  },
174
+ kind: 'PreloadedQuery',
175
+ name: params.name,
176
+ networkCacheConfig: networkCacheConfig,
175
177
  get networkError() {
176
178
  return networkError;
177
179
  },
178
- name: params.name,
179
- networkCacheConfig: networkCacheConfig,
180
- fetchPolicy: fetchPolicy,
180
+ releaseQuery: releaseQuery,
181
181
  source: didMakeNetworkRequest ? returnedObservable : undefined,
182
182
  variables: variables
183
183
  };
@@ -45,17 +45,17 @@ function preloadQuery(environment, preloadableRequest, variables, options, envir
45
45
  };
46
46
  }) : null;
47
47
  return {
48
- kind: 'PreloadedQuery_DEPRECATED',
49
48
  environment: environment,
50
49
  environmentProviderOptions: environmentProviderOptions,
51
50
  fetchKey: queryEntry.fetchKey,
52
51
  fetchPolicy: queryEntry.fetchPolicy,
53
- networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig,
54
52
  id: queryEntry.id,
53
+ kind: 'PreloadedQuery_DEPRECATED',
55
54
  name: queryEntry.name,
55
+ networkCacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig,
56
56
  source: source,
57
- variables: variables,
58
- status: queryEntry.status
57
+ status: queryEntry.status,
58
+ variables: variables
59
59
  };
60
60
  }
61
61
  function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, variables, options) {
@@ -93,13 +93,13 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
93
93
  cacheKey: cacheKey,
94
94
  fetchKey: fetchKey,
95
95
  fetchPolicy: fetchPolicy,
96
- kind: 'cache',
97
96
  id: params.id,
97
+ kind: 'cache',
98
98
  name: params.name,
99
99
  status: {
100
100
  cacheConfig: networkCacheConfig,
101
- source: 'cache',
102
- fetchTime: (_availability$fetchTi = availability === null || availability === void 0 ? void 0 : availability.fetchTime) !== null && _availability$fetchTi !== void 0 ? _availability$fetchTi : null
101
+ fetchTime: (_availability$fetchTi = availability === null || availability === void 0 ? void 0 : availability.fetchTime) !== null && _availability$fetchTi !== void 0 ? _availability$fetchTi : null,
102
+ source: 'cache'
103
103
  }
104
104
  };
105
105
  if (!environment.isServer() && prevQueryEntry == null) {
@@ -116,13 +116,13 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
116
116
  cacheKey: cacheKey,
117
117
  fetchKey: fetchKey,
118
118
  fetchPolicy: fetchPolicy,
119
- kind: 'network',
120
119
  id: params.id,
120
+ kind: 'network',
121
121
  name: params.name,
122
122
  status: {
123
123
  cacheConfig: networkCacheConfig,
124
- source: 'network',
125
- fetchTime: null
124
+ fetchTime: null,
125
+ source: 'network'
126
126
  },
127
127
  subject: subject,
128
128
  subscription: source["finally"](function () {
@@ -103,18 +103,18 @@ function getFragmentState(environment, fragmentSelector) {
103
103
  };
104
104
  } else {
105
105
  return {
106
+ epoch: environment.getStore().getEpoch(),
106
107
  kind: 'plural',
107
108
  snapshots: fragmentSelector.selectors.map(function (s) {
108
109
  return environment.lookup(s);
109
- }),
110
- epoch: environment.getStore().getEpoch()
110
+ })
111
111
  };
112
112
  }
113
113
  } else {
114
114
  return {
115
+ epoch: environment.getStore().getEpoch(),
115
116
  kind: 'singular',
116
- snapshot: environment.lookup(fragmentSelector),
117
- epoch: environment.getStore().getEpoch()
117
+ snapshot: environment.lookup(fragmentSelector)
118
118
  };
119
119
  }
120
120
  }
@@ -175,8 +175,8 @@ function readFragmentInternal(environment, fragmentNode, fragmentRef, hookDispla
175
175
  }
176
176
  }
177
177
  return {
178
- data: data,
179
- clientEdgeQueries: clientEdgeQueries
178
+ clientEdgeQueries: clientEdgeQueries,
179
+ data: data
180
180
  };
181
181
  }
182
182
  module.exports = readFragmentInternal;
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator").default;
4
+ var _require = require('relay-runtime'),
5
+ fetchQuery = _require.fetchQuery;
6
+ function serverFetchQuery(_x, _x2, _x3) {
7
+ return _serverFetchQuery.apply(this, arguments);
8
+ }
9
+ function _serverFetchQuery() {
10
+ _serverFetchQuery = _asyncToGenerator(function* (environment, query, variables) {
11
+ var observable = fetchQuery(environment, query, variables);
12
+ var result = yield observable.toPromise();
13
+ if (result == null) {
14
+ throw new Error('Unexpected null response from fetchQuery');
15
+ }
16
+ return result;
17
+ });
18
+ return _serverFetchQuery.apply(this, arguments);
19
+ }
20
+ module.exports = serverFetchQuery;
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ var invariant = require('invariant');
4
+ var _require = require('relay-runtime'),
5
+ createOperationDescriptor = _require.createOperationDescriptor,
6
+ getRequest = _require.getRequest;
7
+ function serverPreloadQuery(environment, query, variables) {
8
+ var _ref, _request$params$id;
9
+ var request = getRequest(query);
10
+ var operationDescriptor = createOperationDescriptor(request, variables);
11
+ var observable = environment.execute({
12
+ operation: operationDescriptor
13
+ });
14
+ var queryId = (_ref = (_request$params$id = request.params.id) !== null && _request$params$id !== void 0 ? _request$params$id : request.params.cacheID) !== null && _ref !== void 0 ? _ref : request.params.name;
15
+ var response = observable.toPromise().then(function (rawResponse) {
16
+ !(rawResponse != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Unexpected null response from execute') : invariant(false) : void 0;
17
+ !!Array.isArray(rawResponse) ? process.env.NODE_ENV !== "production" ? invariant(false, '@defer is not yet supported in serverPreloadQuery') : invariant(false) : void 0;
18
+ return {
19
+ data: rawResponse.data,
20
+ errors: rawResponse.errors
21
+ };
22
+ });
23
+ return {
24
+ kind: 'PreloadedQueryRef',
25
+ queryId: queryId,
26
+ variables: variables,
27
+ _response: response,
28
+ fetchedAt: Date.now()
29
+ };
30
+ }
31
+ module.exports = serverPreloadQuery;
@@ -0,0 +1,15 @@
1
+ 'use strict';
2
+
3
+ var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator").default;
4
+ var _require = require('relay-runtime/experimental'),
5
+ waitForFragmentData = _require.waitForFragmentData;
6
+ function serverReadFragment(_x, _x2, _x3) {
7
+ return _serverReadFragment.apply(this, arguments);
8
+ }
9
+ function _serverReadFragment() {
10
+ _serverReadFragment = _asyncToGenerator(function* (environment, fragment, fragmentRef) {
11
+ return waitForFragmentData(environment, fragment, fragmentRef);
12
+ });
13
+ return _serverReadFragment.apply(this, arguments);
14
+ }
15
+ module.exports = serverReadFragment;
@@ -0,0 +1,62 @@
1
+ 'use client';
2
+ 'use strict';
3
+
4
+ var usePreloadedQuery = require('../usePreloadedQuery');
5
+ var useRelayEnvironment = require('../useRelayEnvironment');
6
+ var _require = require('react'),
7
+ use = _require.use,
8
+ useMemo = _require.useMemo;
9
+ var _require2 = require('relay-runtime'),
10
+ __internal = _require2.__internal,
11
+ ROOT_TYPE = _require2.ROOT_TYPE,
12
+ createOperationDescriptor = _require2.createOperationDescriptor,
13
+ getRequest = _require2.getRequest;
14
+ var defaultGetDataID = __internal.defaultGetDataID,
15
+ normalizeResponse = __internal.normalizeResponse;
16
+ var committedRefs = new WeakSet();
17
+ var DEFAULT_STALE_MS = 30_000;
18
+ function useQueryFromServer(query, queryRef, options) {
19
+ var _options$staleThresho, _environment$_getData;
20
+ var environment = useRelayEnvironment();
21
+ var request = getRequest(query);
22
+ var threshold = (_options$staleThresho = options === null || options === void 0 ? void 0 : options.staleThresholdMs) !== null && _options$staleThresho !== void 0 ? _options$staleThresho : DEFAULT_STALE_MS;
23
+ var getDataID = (_environment$_getData = environment._getDataID) !== null && _environment$_getData !== void 0 ? _environment$_getData : defaultGetDataID;
24
+ var response = use(queryRef._response);
25
+ var isFresh = response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
26
+ var shouldCommit = isFresh && !committedRefs.has(queryRef);
27
+ if (shouldCommit) {
28
+ var _environment$__log;
29
+ committedRefs.add(queryRef);
30
+ var operation = createOperationDescriptor(request, queryRef.variables);
31
+ var responsePayload = {
32
+ data: response.data,
33
+ errors: response.errors
34
+ };
35
+ var relayPayload = normalizeResponse(responsePayload, operation.root, ROOT_TYPE, {
36
+ getDataID: getDataID,
37
+ treatMissingFieldsAsNull: false,
38
+ deferDeduplicatedFields: false,
39
+ log: (_environment$__log = environment.__log) !== null && _environment$__log !== void 0 ? _environment$__log : null,
40
+ path: [],
41
+ shouldProcessClientComponents: false
42
+ }, false);
43
+ environment.getStore().publish(relayPayload.source);
44
+ }
45
+ var preloadedQuery = useMemo(function () {
46
+ var _request$params$id;
47
+ var isFreshAtMemo = response.data != null && Date.now() - queryRef.fetchedAt <= threshold;
48
+ var useStore = isFreshAtMemo || committedRefs.has(queryRef);
49
+ return {
50
+ kind: 'PreloadedQuery_DEPRECATED',
51
+ environment: environment,
52
+ fetchKey: queryRef.fetchedAt,
53
+ fetchPolicy: useStore ? 'store-or-network' : 'network-only',
54
+ id: (_request$params$id = request.params.id) !== null && _request$params$id !== void 0 ? _request$params$id : request.params.name,
55
+ name: request.params.name,
56
+ source: null,
57
+ variables: queryRef.variables
58
+ };
59
+ }, [environment, queryRef.fetchedAt, response.data, queryRef.variables, request.params.id, request.params.name, threshold]);
60
+ return usePreloadedQuery(query, preloadedQuery);
61
+ }
62
+ module.exports = useQueryFromServer;