react-relay 12.0.0 → 13.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (169) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +47 -0
  3. package/ReactRelayContainerUtils.js.flow +1 -1
  4. package/ReactRelayContext.js +2 -2
  5. package/ReactRelayContext.js.flow +3 -4
  6. package/ReactRelayFragmentContainer.js.flow +11 -17
  7. package/ReactRelayFragmentMockRenderer.js.flow +2 -2
  8. package/ReactRelayLocalQueryRenderer.js.flow +7 -8
  9. package/ReactRelayPaginationContainer.js.flow +30 -40
  10. package/ReactRelayQueryFetcher.js.flow +10 -11
  11. package/ReactRelayQueryRenderer.js.flow +16 -16
  12. package/ReactRelayQueryRendererContext.js.flow +1 -1
  13. package/ReactRelayRefetchContainer.js.flow +25 -33
  14. package/ReactRelayTestMocker.js.flow +17 -15
  15. package/ReactRelayTypes.js.flow +11 -11
  16. package/RelayContext.js.flow +4 -4
  17. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -3
  18. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +2 -3
  19. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +2 -3
  20. package/__flowtests__/RelayModern-flowtest.js.flow +79 -47
  21. package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +6 -5
  22. package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +6 -5
  23. package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +5 -4
  24. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +5 -4
  25. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +14 -11
  26. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +14 -11
  27. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +14 -9
  28. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +14 -11
  29. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +14 -9
  30. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +14 -11
  31. package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +16 -13
  32. package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +16 -13
  33. package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +14 -11
  34. package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +14 -11
  35. package/assertFragmentMap.js.flow +3 -3
  36. package/buildReactRelayContainer.js.flow +12 -11
  37. package/getRootVariablesForFragments.js.flow +3 -5
  38. package/hooks.js +2 -2
  39. package/hooks.js.flow +4 -6
  40. package/index.js +2 -2
  41. package/index.js.flow +5 -7
  42. package/isRelayEnvironment.js.flow +1 -1
  43. package/jest-react/enqueueTask.js.flow +2 -2
  44. package/jest-react/index.js.flow +1 -1
  45. package/jest-react/internalAct.js.flow +2 -4
  46. package/legacy.js +2 -2
  47. package/legacy.js.flow +1 -1
  48. package/lib/ReactRelayContainerUtils.js +1 -1
  49. package/lib/ReactRelayContext.js +1 -1
  50. package/lib/ReactRelayFragmentContainer.js +5 -5
  51. package/lib/ReactRelayFragmentMockRenderer.js +3 -3
  52. package/lib/ReactRelayLocalQueryRenderer.js +8 -9
  53. package/lib/ReactRelayPaginationContainer.js +19 -23
  54. package/lib/ReactRelayQueryFetcher.js +3 -3
  55. package/lib/ReactRelayQueryRenderer.js +5 -5
  56. package/lib/ReactRelayQueryRendererContext.js +1 -1
  57. package/lib/ReactRelayRefetchContainer.js +13 -15
  58. package/lib/ReactRelayTestMocker.js +8 -9
  59. package/lib/ReactRelayTypes.js +1 -1
  60. package/lib/RelayContext.js +4 -3
  61. package/lib/assertFragmentMap.js +3 -2
  62. package/lib/buildReactRelayContainer.js +8 -8
  63. package/lib/getRootVariablesForFragments.js +2 -3
  64. package/lib/hooks.js +6 -6
  65. package/lib/index.js +8 -8
  66. package/lib/isRelayEnvironment.js +1 -1
  67. package/lib/jest-react/enqueueTask.js +1 -1
  68. package/lib/jest-react/internalAct.js +3 -4
  69. package/lib/legacy.js +1 -1
  70. package/lib/multi-actor/ActorChange.js +3 -3
  71. package/lib/multi-actor/index.js +1 -1
  72. package/lib/multi-actor/useRelayActorEnvironment.js +3 -3
  73. package/lib/readContext.js +1 -1
  74. package/lib/relay-hooks/EntryPointContainer.react.js +4 -4
  75. package/lib/relay-hooks/EntryPointTypes.flow.js +1 -1
  76. package/lib/relay-hooks/FragmentResource.js +242 -46
  77. package/lib/relay-hooks/InternalLogger.js +1 -1
  78. package/lib/relay-hooks/LRUCache.js +1 -1
  79. package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +5 -5
  80. package/lib/relay-hooks/MatchContainer.js +2 -2
  81. package/lib/relay-hooks/ProfilerContext.js +1 -1
  82. package/lib/relay-hooks/QueryResource.js +84 -5
  83. package/lib/relay-hooks/RelayEnvironmentProvider.js +1 -1
  84. package/lib/relay-hooks/SuspenseResource.js +130 -0
  85. package/lib/relay-hooks/loadEntryPoint.js +1 -1
  86. package/lib/relay-hooks/loadQuery.js +9 -10
  87. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +25 -11
  88. package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +1 -1
  89. package/lib/relay-hooks/useBlockingPaginationFragment.js +3 -3
  90. package/lib/relay-hooks/useEntryPointLoader.js +3 -3
  91. package/lib/relay-hooks/useFetchTrackingRef.js +3 -2
  92. package/lib/relay-hooks/useFragment.js +7 -7
  93. package/lib/relay-hooks/useFragmentNode.js +5 -5
  94. package/lib/relay-hooks/useIsMountedRef.js +1 -1
  95. package/lib/relay-hooks/useIsOperationNodeActive.js +3 -3
  96. package/lib/relay-hooks/useIsParentQueryActive.js +1 -1
  97. package/lib/relay-hooks/useLazyLoadQuery.js +4 -4
  98. package/lib/relay-hooks/useLazyLoadQueryNode.js +5 -5
  99. package/lib/relay-hooks/useLoadMoreFunction.js +8 -10
  100. package/lib/relay-hooks/useMemoOperationDescriptor.js +3 -3
  101. package/lib/relay-hooks/useMemoVariables.js +3 -3
  102. package/lib/relay-hooks/useMutation.js +18 -7
  103. package/lib/relay-hooks/usePaginationFragment.js +1 -1
  104. package/lib/relay-hooks/usePreloadedQuery.js +6 -6
  105. package/lib/relay-hooks/useQueryLoader.js +5 -5
  106. package/lib/relay-hooks/useRefetchableFragment.js +1 -1
  107. package/lib/relay-hooks/useRefetchableFragmentNode.js +11 -13
  108. package/lib/relay-hooks/useRelayEnvironment.js +3 -3
  109. package/lib/relay-hooks/useStaticFragmentNodeWarning.js +3 -3
  110. package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -2
  111. package/lib/relay-hooks/useSubscription.js +1 -1
  112. package/multi-actor/ActorChange.js.flow +4 -5
  113. package/multi-actor/index.js.flow +1 -1
  114. package/multi-actor/useRelayActorEnvironment.js.flow +6 -8
  115. package/package.json +3 -3
  116. package/react-relay-hooks.js +2 -2
  117. package/react-relay-hooks.min.js +3 -3
  118. package/react-relay-legacy.js +2 -2
  119. package/react-relay-legacy.min.js +3 -3
  120. package/react-relay.js +2 -2
  121. package/react-relay.min.js +3 -3
  122. package/readContext.js.flow +1 -1
  123. package/relay-hooks/EntryPointContainer.react.js.flow +9 -16
  124. package/relay-hooks/EntryPointTypes.flow.js.flow +19 -25
  125. package/relay-hooks/FragmentResource.js.flow +221 -35
  126. package/relay-hooks/InternalLogger.js.flow +1 -1
  127. package/relay-hooks/LRUCache.js.flow +1 -1
  128. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +33 -47
  129. package/relay-hooks/MatchContainer.js.flow +4 -3
  130. package/relay-hooks/ProfilerContext.js.flow +1 -1
  131. package/relay-hooks/QueryResource.js.flow +120 -18
  132. package/relay-hooks/RelayEnvironmentProvider.js.flow +10 -10
  133. package/relay-hooks/SuspenseResource.js.flow +115 -0
  134. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +5 -4
  135. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +2 -2
  136. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +59 -0
  137. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +61 -0
  138. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +11 -10
  139. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +55 -32
  140. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +11 -10
  141. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +11 -10
  142. package/relay-hooks/__flowtests__/utils.js.flow +21 -32
  143. package/relay-hooks/loadEntryPoint.js.flow +7 -13
  144. package/relay-hooks/loadQuery.js.flow +23 -24
  145. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +30 -14
  146. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -13
  147. package/relay-hooks/useBlockingPaginationFragment.js.flow +13 -14
  148. package/relay-hooks/useEntryPointLoader.js.flow +8 -11
  149. package/relay-hooks/useFetchTrackingRef.js.flow +3 -3
  150. package/relay-hooks/useFragment.js.flow +31 -62
  151. package/relay-hooks/useFragmentNode.js.flow +6 -8
  152. package/relay-hooks/useIsMountedRef.js.flow +1 -1
  153. package/relay-hooks/useIsOperationNodeActive.js.flow +4 -6
  154. package/relay-hooks/useIsParentQueryActive.js.flow +4 -5
  155. package/relay-hooks/useLazyLoadQuery.js.flow +14 -16
  156. package/relay-hooks/useLazyLoadQueryNode.js.flow +12 -14
  157. package/relay-hooks/useLoadMoreFunction.js.flow +20 -28
  158. package/relay-hooks/useMemoOperationDescriptor.js.flow +6 -8
  159. package/relay-hooks/useMemoVariables.js.flow +7 -7
  160. package/relay-hooks/useMutation.js.flow +27 -27
  161. package/relay-hooks/usePaginationFragment.js.flow +38 -47
  162. package/relay-hooks/usePreloadedQuery.js.flow +14 -20
  163. package/relay-hooks/useQueryLoader.js.flow +14 -17
  164. package/relay-hooks/useRefetchableFragment.js.flow +8 -9
  165. package/relay-hooks/useRefetchableFragmentNode.js.flow +23 -31
  166. package/relay-hooks/useRelayEnvironment.js.flow +3 -5
  167. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -4
  168. package/relay-hooks/useSubscribeToInvalidationState.js.flow +4 -7
  169. package/relay-hooks/useSubscription.js.flow +7 -8
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,82 +13,51 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const useFragmentNode = require('./useFragmentNode');
17
- const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
16
+ import type {Fragment, FragmentType, GraphQLTaggedNode} from 'relay-runtime';
18
17
 
19
18
  const {useTrackLoadQueryInRender} = require('./loadQuery');
19
+ const useFragmentNode = require('./useFragmentNode');
20
+ const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
20
21
  const {useDebugValue} = require('react');
21
22
  const {getFragment} = require('relay-runtime');
22
23
 
23
- import type {GraphQLTaggedNode, FragmentReference} from 'relay-runtime';
24
-
25
- // NOTE: These declares ensure that the type of the returned data is:
26
- // - non-nullable if the provided ref type is non-nullable
27
- // - nullable if the provided ref type is nullable
28
- // - array of non-nullable if the privoided ref type is an array of
29
- // non-nullable refs
30
- // - array of nullable if the privoided ref type is an array of nullable refs
24
+ type HasSpread<TFragmentType> = {
25
+ +$fragmentSpreads: TFragmentType,
26
+ ...
27
+ };
31
28
 
32
- declare function useFragment<
33
- TKey: {+$data?: mixed, +$fragmentRefs: FragmentReference, ...},
34
- >(
35
- fragmentInput: GraphQLTaggedNode,
36
- fragmentRef: TKey,
37
- ): $Call<<TFragmentData>({+$data?: TFragmentData, ...}) => TFragmentData, TKey>;
29
+ // if the key is non-nullable, return non-nullable value
30
+ declare function useFragment<TFragmentType: FragmentType, TData>(
31
+ fragment: Fragment<TFragmentType, TData>,
32
+ key: HasSpread<TFragmentType>,
33
+ ): TData;
38
34
 
39
- declare function useFragment<
40
- TKey: ?{+$data?: mixed, +$fragmentRefs: FragmentReference, ...},
41
- >(
42
- fragmentInput: GraphQLTaggedNode,
43
- fragmentRef: TKey,
44
- ): $Call<
45
- <TFragmentData>(?{+$data?: TFragmentData, ...}) => ?TFragmentData,
46
- TKey,
47
- >;
35
+ // if the key is nullable, return nullable value
36
+ declare function useFragment<TFragmentType: FragmentType, TData>(
37
+ fragment: Fragment<TFragmentType, TData>,
38
+ key: ?HasSpread<TFragmentType>,
39
+ ): ?TData;
48
40
 
49
- declare function useFragment<
50
- TKey: $ReadOnlyArray<{
51
- +$data?: mixed,
52
- +$fragmentRefs: FragmentReference,
53
- ...
54
- }>,
55
- >(
56
- fragmentInput: GraphQLTaggedNode,
57
- fragmentRef: TKey,
58
- ): $Call<
59
- <TFragmentData>(
60
- $ReadOnlyArray<{+$data?: TFragmentData, ...}>,
61
- ) => TFragmentData,
62
- TKey,
63
- >;
41
+ // if the key is a non-nullable array of keys, return non-nullable array
42
+ declare function useFragment<TFragmentType: FragmentType, TData>(
43
+ fragment: Fragment<TFragmentType, TData>,
44
+ key: $ReadOnlyArray<HasSpread<TFragmentType>>,
45
+ ): TData;
64
46
 
65
- declare function useFragment<
66
- TKey: ?$ReadOnlyArray<{
67
- +$data?: mixed,
68
- +$fragmentRefs: FragmentReference,
69
- ...
70
- }>,
71
- >(
72
- fragmentInput: GraphQLTaggedNode,
73
- fragmentRef: TKey,
74
- ): $Call<
75
- <TFragmentData>(
76
- ?$ReadOnlyArray<{+$data?: TFragmentData, ...}>,
77
- ) => ?TFragmentData,
78
- TKey,
79
- >;
47
+ // if the key is a nullable array of keys, return nullable array
48
+ declare function useFragment<TFragmentType: FragmentType, TData>(
49
+ fragment: Fragment<TFragmentType, TData>,
50
+ key: ?$ReadOnlyArray<HasSpread<TFragmentType>>,
51
+ ): ?TData;
80
52
 
81
- function useFragment(
82
- fragmentInput: GraphQLTaggedNode,
83
- fragmentRef: mixed,
84
- ): mixed {
53
+ function useFragment(fragment: GraphQLTaggedNode, key: mixed): mixed {
85
54
  // We need to use this hook in order to be able to track if
86
55
  // loadQuery was called during render
87
56
  useTrackLoadQueryInRender();
88
57
 
89
- const fragmentNode = getFragment(fragmentInput);
58
+ const fragmentNode = getFragment(fragment);
90
59
  useStaticFragmentNodeWarning(fragmentNode, 'first argument of useFragment()');
91
- const {data} = useFragmentNode<_>(fragmentNode, fragmentRef, 'useFragment()');
60
+ const {data} = useFragmentNode<_>(fragmentNode, key, 'useFragment()');
92
61
  if (__DEV__) {
93
62
  // eslint-disable-next-line react-hooks/rules-of-hooks
94
63
  useDebugValue({fragment: fragmentNode.name, data});
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,14 +13,13 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const useRelayEnvironment = require('./useRelayEnvironment');
17
- const warning = require('warning');
16
+ import type {ReaderFragment} from 'relay-runtime';
18
17
 
19
18
  const {getFragmentResourceForEnvironment} = require('./FragmentResource');
19
+ const useRelayEnvironment = require('./useRelayEnvironment');
20
20
  const {useEffect, useRef, useState} = require('react');
21
21
  const {getFragmentIdentifier} = require('relay-runtime');
22
-
23
- import type {ReaderFragment} from 'relay-runtime';
22
+ const warning = require('warning');
24
23
 
25
24
  type ReturnType<TFragmentData: mixed> = {|
26
25
  data: TFragmentData,
@@ -51,9 +50,8 @@ function useFragmentNode<TFragmentData: mixed>(
51
50
  const isListeningForUpdatesRef = useRef(true);
52
51
  function enableStoreUpdates() {
53
52
  isListeningForUpdatesRef.current = true;
54
- const didMissUpdates = FragmentResource.checkMissedUpdates(
55
- fragmentResult,
56
- )[0];
53
+ const didMissUpdates =
54
+ FragmentResource.checkMissedUpdates(fragmentResult)[0];
57
55
  if (didMissUpdates) {
58
56
  handleDataUpdate();
59
57
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -11,18 +11,16 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- const React = require('react');
14
+ import type {ReaderFragment} from 'relay-runtime';
15
15
 
16
- const invariant = require('invariant');
17
16
  const useRelayEnvironment = require('./useRelayEnvironment');
18
-
17
+ const invariant = require('invariant');
18
+ const React = require('react');
19
19
  const {
20
20
  __internal: {getObservableForActiveRequest},
21
21
  getSelector,
22
22
  } = require('relay-runtime');
23
23
 
24
- import type {ReaderFragment} from 'relay-runtime';
25
-
26
24
  const {useEffect, useState, useMemo} = React;
27
25
 
28
26
  function useIsOperationNodeActive(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -11,15 +11,14 @@
11
11
 
12
12
  'use strict';
13
13
 
14
+ import type {FragmentType, GraphQLTaggedNode} from 'relay-runtime';
15
+
14
16
  const useIsOperationNodeActive = require('./useIsOperationNodeActive');
15
17
  const useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
16
-
17
18
  const {getFragment} = require('relay-runtime');
18
19
 
19
- import type {GraphQLTaggedNode, FragmentReference} from 'relay-runtime';
20
-
21
20
  function useIsParentQueryActive<
22
- TKey: ?{+$data?: mixed, +$fragmentRefs: FragmentReference, ...},
21
+ TKey: ?{+$data?: mixed, +$fragmentSpreads: FragmentType, ...},
23
22
  >(fragmentInput: GraphQLTaggedNode, fragmentRef: TKey): boolean {
24
23
  const fragmentNode = getFragment(fragmentInput);
25
24
  useStaticFragmentNodeWarning(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,34 +13,32 @@
13
13
 
14
14
  'use strict';
15
15
 
16
+ import type {
17
+ CacheConfig,
18
+ FetchPolicy,
19
+ Query,
20
+ RenderPolicy,
21
+ Variables,
22
+ } from 'relay-runtime';
23
+
24
+ const {useTrackLoadQueryInRender} = require('./loadQuery');
16
25
  const useLazyLoadQueryNode = require('./useLazyLoadQueryNode');
17
26
  const useMemoOperationDescriptor = require('./useMemoOperationDescriptor');
18
27
  const useRelayEnvironment = require('./useRelayEnvironment');
19
-
20
- const {useTrackLoadQueryInRender} = require('./loadQuery');
21
28
  const {
22
29
  __internal: {fetchQuery},
23
30
  } = require('relay-runtime');
24
31
 
25
- import type {
26
- CacheConfig,
27
- FetchPolicy,
28
- GraphQLTaggedNode,
29
- OperationType,
30
- RenderPolicy,
31
- VariablesOf,
32
- } from 'relay-runtime';
33
-
34
- function useLazyLoadQuery<TQuery: OperationType>(
35
- gqlQuery: GraphQLTaggedNode,
36
- variables: VariablesOf<TQuery>,
32
+ function useLazyLoadQuery<TVariables: Variables, TData>(
33
+ gqlQuery: Query<TVariables, TData>,
34
+ variables: TVariables,
37
35
  options?: {|
38
36
  fetchKey?: string | number,
39
37
  fetchPolicy?: FetchPolicy,
40
38
  networkCacheConfig?: CacheConfig,
41
39
  UNSTABLE_renderPolicy?: RenderPolicy,
42
40
  |},
43
- ): $ElementType<TQuery, 'response'> {
41
+ ): TData {
44
42
  // We need to use this hook in order to be able to track if
45
43
  // loadQuery was called during render
46
44
  useTrackLoadQueryInRender();
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,18 +13,6 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const ProfilerContext = require('./ProfilerContext');
17
- const React = require('react');
18
-
19
- const useFetchTrackingRef = require('./useFetchTrackingRef');
20
- const useFragmentNode = require('./useFragmentNode');
21
- const useRelayEnvironment = require('./useRelayEnvironment');
22
-
23
- const {
24
- getQueryResourceForEnvironment,
25
- getQueryCacheIdentifier,
26
- } = require('./QueryResource');
27
-
28
16
  import type {
29
17
  FetchPolicy,
30
18
  GraphQLResponse,
@@ -34,6 +22,16 @@ import type {
34
22
  RenderPolicy,
35
23
  } from 'relay-runtime';
36
24
 
25
+ const ProfilerContext = require('./ProfilerContext');
26
+ const {
27
+ getQueryCacheIdentifier,
28
+ getQueryResourceForEnvironment,
29
+ } = require('./QueryResource');
30
+ const useFetchTrackingRef = require('./useFetchTrackingRef');
31
+ const useFragmentNode = require('./useFragmentNode');
32
+ const useRelayEnvironment = require('./useRelayEnvironment');
33
+ const React = require('react');
34
+
37
35
  const {useContext, useEffect, useState, useRef} = React;
38
36
 
39
37
  function useLazyLoadQueryNode<TQuery: OperationType>({
@@ -50,7 +48,7 @@ function useLazyLoadQueryNode<TQuery: OperationType>({
50
48
  fetchPolicy?: ?FetchPolicy,
51
49
  fetchKey?: ?string | ?number,
52
50
  renderPolicy?: ?RenderPolicy,
53
- |}): $ElementType<TQuery, 'response'> {
51
+ |}): TQuery['response'] {
54
52
  const environment = useRelayEnvironment();
55
53
  const profilerContext = useContext(ProfilerContext);
56
54
  const QueryResource = getQueryResourceForEnvironment(environment);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,34 +13,33 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const invariant = require('invariant');
16
+ import type {
17
+ ConcreteRequest,
18
+ Direction,
19
+ Disposable,
20
+ GraphQLResponse,
21
+ Observer,
22
+ OperationType,
23
+ ReaderFragment,
24
+ ReaderPaginationMetadata,
25
+ VariablesOf,
26
+ } from 'relay-runtime';
27
+
17
28
  const useFetchTrackingRef = require('./useFetchTrackingRef');
18
29
  const useIsMountedRef = require('./useIsMountedRef');
19
30
  const useIsOperationNodeActive = require('./useIsOperationNodeActive');
20
31
  const useRelayEnvironment = require('./useRelayEnvironment');
21
- const warning = require('warning');
22
-
32
+ const invariant = require('invariant');
23
33
  const {useCallback, useEffect, useState} = require('react');
24
34
  const {
25
35
  ConnectionInterface,
26
36
  __internal: {fetchQuery},
27
37
  createOperationDescriptor,
28
38
  getPaginationVariables,
29
- getValueAtPath,
30
39
  getSelector,
40
+ getValueAtPath,
31
41
  } = require('relay-runtime');
32
-
33
- import type {
34
- ConcreteRequest,
35
- Direction,
36
- Disposable,
37
- GraphQLResponse,
38
- Observer,
39
- OperationType,
40
- ReaderFragment,
41
- ReaderPaginationMetadata,
42
- VariablesOf,
43
- } from 'relay-runtime';
42
+ const warning = require('warning');
44
43
 
45
44
  export type LoadMoreFn<TQuery: OperationType> = (
46
45
  count: number,
@@ -83,12 +82,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
83
82
  identifierField,
84
83
  } = args;
85
84
  const environment = useRelayEnvironment();
86
- const {
87
- isFetchingRef,
88
- startFetch,
89
- disposeFetch,
90
- completeFetch,
91
- } = useFetchTrackingRef();
85
+ const {isFetchingRef, startFetch, disposeFetch, completeFetch} =
86
+ useFetchTrackingRef();
92
87
  const identifierValue =
93
88
  identifierField != null &&
94
89
  fragmentData != null &&
@@ -97,9 +92,8 @@ function useLoadMoreFunction<TQuery: OperationType>(
97
92
  : null;
98
93
  const isMountedRef = useIsMountedRef();
99
94
  const [mirroredEnvironment, setMirroredEnvironment] = useState(environment);
100
- const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] = useState(
101
- fragmentIdentifier,
102
- );
95
+ const [mirroredFragmentIdentifier, setMirroredFragmentIdentifier] =
96
+ useState(fragmentIdentifier);
103
97
 
104
98
  const isParentQueryActive = useIsOperationNodeActive(
105
99
  fragmentNode,
@@ -189,7 +183,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
189
183
  const parentVariables = fragmentSelector.owner.variables;
190
184
  const fragmentVariables = fragmentSelector.variables;
191
185
  const extraVariables = options?.UNSTABLE_extraVariables;
192
- // $FlowFixMe[cannot-spread-interface]
193
186
  const baseVariables = {
194
187
  ...parentVariables,
195
188
  ...fragmentVariables,
@@ -199,7 +192,6 @@ function useLoadMoreFunction<TQuery: OperationType>(
199
192
  count,
200
193
  cursor,
201
194
  baseVariables,
202
- // $FlowFixMe[cannot-spread-interface]
203
195
  {...extraVariables},
204
196
  paginationMetadata,
205
197
  );
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,19 +13,17 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const React = require('react');
17
-
18
- const useMemoVariables = require('./useMemoVariables');
19
-
20
- const {createOperationDescriptor, getRequest} = require('relay-runtime');
21
-
22
16
  import type {
17
+ CacheConfig,
23
18
  GraphQLTaggedNode,
24
19
  OperationDescriptor,
25
20
  Variables,
26
- CacheConfig,
27
21
  } from 'relay-runtime';
28
22
 
23
+ const useMemoVariables = require('./useMemoVariables');
24
+ const React = require('react');
25
+ const {createOperationDescriptor, getRequest} = require('relay-runtime');
26
+
29
27
  const {useMemo} = React;
30
28
 
31
29
  function useMemoOperationDescriptor(
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,11 +13,10 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const React = require('react');
16
+ import type {Variables} from 'relay-runtime';
17
17
 
18
18
  const areEqual = require('areEqual');
19
-
20
- import type {Variables} from 'relay-runtime';
19
+ const React = require('react');
21
20
 
22
21
  const {useMemo, useRef, useState} = React;
23
22
 
@@ -45,9 +44,10 @@ function useMemoVariables<TVariables: Variables | null>(
45
44
  // NOTE: We disable react-hooks-deps warning because we explicitly
46
45
  // don't want to memoize on object identity
47
46
  // eslint-disable-next-line react-hooks/exhaustive-deps
48
- const memoVariables = useMemo(() => variables, [
49
- variablesChangedGenerationRef.current,
50
- ]);
47
+ const memoVariables = useMemo(
48
+ () => variables,
49
+ [variablesChangedGenerationRef.current],
50
+ );
51
51
  return [memoVariables, variablesChangedGenerationRef.current ?? 0];
52
52
  }
53
53
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
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.
@@ -13,46 +13,43 @@
13
13
 
14
14
  'use strict';
15
15
 
16
- const React = require('react');
17
-
18
- const useRelayEnvironment = require('./useRelayEnvironment');
19
-
20
- const {commitMutation: defaultCommitMutation} = require('relay-runtime');
21
- const {useState, useEffect, useRef, useCallback} = React;
22
- const useIsMountedRef = require('./useIsMountedRef');
23
-
24
16
  import type {
25
- GraphQLTaggedNode,
17
+ DeclarativeMutationConfig,
26
18
  Disposable,
19
+ GraphQLTaggedNode,
20
+ IEnvironment,
27
21
  MutationConfig,
28
22
  MutationParameters,
29
- IEnvironment,
30
23
  PayloadError,
31
- DeclarativeMutationConfig,
32
24
  SelectorStoreUpdater,
33
25
  UploadableMap,
34
26
  } from 'relay-runtime';
35
27
 
28
+ const useIsMountedRef = require('./useIsMountedRef');
29
+ const useRelayEnvironment = require('./useRelayEnvironment');
30
+ const React = require('react');
31
+ const {commitMutation: defaultCommitMutation} = require('relay-runtime');
32
+
33
+ const {useState, useEffect, useRef, useCallback} = React;
34
+
36
35
  export type UseMutationConfig<TMutation: MutationParameters> = {|
37
36
  configs?: Array<DeclarativeMutationConfig>,
38
37
  onError?: ?(error: Error) => void,
39
38
  onCompleted?: ?(
40
- response: $ElementType<TMutation, 'response'>,
39
+ response: TMutation['response'],
41
40
  errors: ?Array<PayloadError>,
42
41
  ) => void,
42
+ onNext?: ?() => void,
43
43
  onUnsubscribe?: ?() => void,
44
- optimisticResponse?: $ElementType<
45
- {
46
- +rawResponse?: {...},
47
- ...TMutation,
48
- ...
49
- },
50
- 'rawResponse',
51
- >,
52
- optimisticUpdater?: ?SelectorStoreUpdater,
53
- updater?: ?SelectorStoreUpdater,
44
+ optimisticResponse?: {
45
+ +rawResponse?: {...},
46
+ ...TMutation,
47
+ ...
48
+ }['rawResponse'],
49
+ optimisticUpdater?: ?SelectorStoreUpdater<TMutation['response']>,
50
+ updater?: ?SelectorStoreUpdater<TMutation['response']>,
54
51
  uploadables?: UploadableMap,
55
- variables: $ElementType<TMutation, 'variables'>,
52
+ variables: TMutation['variables'],
56
53
  |};
57
54
 
58
55
  function useMutation<TMutation: MutationParameters>(
@@ -105,15 +102,18 @@ function useMutation<TMutation: MutationParameters>(
105
102
  mutation,
106
103
  onCompleted: (response, errors) => {
107
104
  cleanup(disposable);
108
- config.onCompleted && config.onCompleted(response, errors);
105
+ config.onCompleted?.(response, errors);
109
106
  },
110
107
  onError: error => {
111
108
  cleanup(disposable);
112
- config.onError && config.onError(error);
109
+ config.onError?.(error);
113
110
  },
114
111
  onUnsubscribe: () => {
115
112
  cleanup(disposable);
116
- config.onUnsubscribe && config.onUnsubscribe();
113
+ config.onUnsubscribe?.();
114
+ },
115
+ onNext: () => {
116
+ config.onNext?.();
117
117
  },
118
118
  });
119
119
  inFlightMutationsRef.current.add(disposable);