@apollo/client 4.1.0-alpha.2 → 4.1.0-alpha.4

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 (250) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/__cjs/cache/core/cache.cjs +148 -50
  3. package/__cjs/cache/core/cache.cjs.map +1 -1
  4. package/__cjs/cache/core/cache.d.cts +72 -23
  5. package/__cjs/cache/core/types/common.cjs.map +1 -1
  6. package/__cjs/cache/core/types/common.d.cts +1 -1
  7. package/__cjs/cache/inmemory/fragmentRegistry.cjs +1 -1
  8. package/__cjs/cache/inmemory/fragmentRegistry.cjs.map +1 -1
  9. package/__cjs/cache/inmemory/inMemoryCache.cjs +12 -1
  10. package/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  11. package/__cjs/core/ApolloClient.cjs +24 -27
  12. package/__cjs/core/ApolloClient.cjs.map +1 -1
  13. package/__cjs/core/ApolloClient.d.cts +94 -5
  14. package/__cjs/core/ObservableQuery.cjs +8 -4
  15. package/__cjs/core/ObservableQuery.cjs.map +1 -1
  16. package/__cjs/core/ObservableQuery.d.cts +2 -2
  17. package/__cjs/core/QueryManager.cjs +1 -1
  18. package/__cjs/core/QueryManager.cjs.map +1 -1
  19. package/__cjs/dev/setErrorMessageHandler.cjs.map +1 -1
  20. package/__cjs/dev/setErrorMessageHandler.d.cts +1 -1
  21. package/__cjs/incremental/handlers/defer20220824.cjs +6 -2
  22. package/__cjs/incremental/handlers/defer20220824.cjs.map +1 -1
  23. package/__cjs/incremental/handlers/defer20220824.d.cts +0 -2
  24. package/__cjs/incremental/handlers/graphql17Alpha9.cjs +9 -3
  25. package/__cjs/incremental/handlers/graphql17Alpha9.cjs.map +1 -1
  26. package/__cjs/link/schema/index.cjs +1 -1
  27. package/__cjs/link/schema/index.cjs.map +1 -1
  28. package/__cjs/link/schema/index.d.cts +1 -1
  29. package/__cjs/link/subscriptions/index.cjs +2 -1
  30. package/__cjs/link/subscriptions/index.cjs.map +1 -1
  31. package/__cjs/masking/maskDefinition.cjs +1 -1
  32. package/__cjs/masking/maskDefinition.cjs.map +1 -1
  33. package/__cjs/masking/types.d.cts +2 -1
  34. package/__cjs/react/hooks/internal/index.cjs +3 -1
  35. package/__cjs/react/hooks/internal/index.cjs.map +1 -1
  36. package/__cjs/react/hooks/internal/index.d.cts +1 -0
  37. package/__cjs/react/hooks/internal/useDeepMemo.cjs +2 -0
  38. package/__cjs/react/hooks/internal/useDeepMemo.cjs.map +1 -1
  39. package/__cjs/react/hooks/internal/useRenderGuard.cjs +1 -1
  40. package/__cjs/react/hooks/internal/useRenderGuard.cjs.map +1 -1
  41. package/__cjs/react/hooks/internal/useSuspenseHookCacheKey.cjs +28 -0
  42. package/__cjs/react/hooks/internal/useSuspenseHookCacheKey.cjs.map +1 -0
  43. package/__cjs/react/hooks/internal/useSuspenseHookCacheKey.d.cts +11 -0
  44. package/__cjs/react/hooks/useBackgroundQuery.cjs +3 -11
  45. package/__cjs/react/hooks/useBackgroundQuery.cjs.map +1 -1
  46. package/__cjs/react/hooks/useFragment.cjs +38 -87
  47. package/__cjs/react/hooks/useFragment.cjs.map +1 -1
  48. package/__cjs/react/hooks/useFragment.d.cts +65 -6
  49. package/__cjs/react/hooks/useLazyQuery.cjs +2 -0
  50. package/__cjs/react/hooks/useLazyQuery.cjs.map +1 -1
  51. package/__cjs/react/hooks/useLazyQuery.d.cts +1 -1
  52. package/__cjs/react/hooks/useMutation.d.cts +3 -1
  53. package/__cjs/react/hooks/useQuery.cjs +1 -4
  54. package/__cjs/react/hooks/useQuery.cjs.map +1 -1
  55. package/__cjs/react/hooks/useQuery.d.cts +2 -2
  56. package/__cjs/react/hooks/useQueryRefHandlers.cjs +1 -3
  57. package/__cjs/react/hooks/useQueryRefHandlers.cjs.map +1 -1
  58. package/__cjs/react/hooks/useReactiveVar.cjs +2 -1
  59. package/__cjs/react/hooks/useReactiveVar.cjs.map +1 -1
  60. package/__cjs/react/hooks/useReactiveVar.d.cts +2 -1
  61. package/__cjs/react/hooks/useReadQuery.cjs +1 -3
  62. package/__cjs/react/hooks/useReadQuery.cjs.map +1 -1
  63. package/__cjs/react/hooks/useReadQuery.d.cts +1 -1
  64. package/__cjs/react/hooks/useSubscription.cjs +1 -1
  65. package/__cjs/react/hooks/useSubscription.cjs.map +1 -1
  66. package/__cjs/react/hooks/useSuspenseFragment.cjs +16 -16
  67. package/__cjs/react/hooks/useSuspenseFragment.cjs.map +1 -1
  68. package/__cjs/react/hooks/useSuspenseFragment.d.cts +33 -7
  69. package/__cjs/react/hooks/useSuspenseQuery.cjs +6 -12
  70. package/__cjs/react/hooks/useSuspenseQuery.cjs.map +1 -1
  71. package/__cjs/react/hooks/useSuspenseQuery.d.cts +1 -1
  72. package/__cjs/react/hooks/useSyncExternalStore.cjs +1 -1
  73. package/__cjs/react/hooks/useSyncExternalStore.cjs.map +1 -1
  74. package/__cjs/react/internal/cache/FragmentReference.cjs +3 -22
  75. package/__cjs/react/internal/cache/FragmentReference.cjs.map +1 -1
  76. package/__cjs/react/internal/cache/FragmentReference.d.cts +2 -4
  77. package/__cjs/react/internal/cache/QueryReference.cjs +1 -1
  78. package/__cjs/react/internal/cache/QueryReference.cjs.map +1 -1
  79. package/__cjs/react/internal/cache/QueryReference.d.cts +4 -0
  80. package/__cjs/react/internal/cache/SuspenseCache.cjs.map +1 -1
  81. package/__cjs/react/internal/cache/SuspenseCache.d.cts +1 -1
  82. package/__cjs/react/internal/cache/types.d.cts +2 -2
  83. package/__cjs/react/ssr/useSSRQuery.cjs +1 -0
  84. package/__cjs/react/ssr/useSSRQuery.cjs.map +1 -1
  85. package/__cjs/react/types/types.documentation.d.cts +4 -16
  86. package/__cjs/testing/core/mocking/mockLink.cjs +2 -2
  87. package/__cjs/testing/core/mocking/mockLink.cjs.map +1 -1
  88. package/__cjs/testing/core/mocking/mockLink.d.cts +3 -1
  89. package/__cjs/utilities/DeepPartial.cjs.map +1 -1
  90. package/__cjs/utilities/DeepPartial.d.cts +1 -1
  91. package/__cjs/utilities/internal/combineLatestBatched.cjs +71 -0
  92. package/__cjs/utilities/internal/combineLatestBatched.cjs.map +1 -0
  93. package/__cjs/utilities/internal/combineLatestBatched.d.cts +14 -0
  94. package/__cjs/utilities/internal/getMemoryInternals.cjs.map +1 -1
  95. package/__cjs/utilities/internal/index.cjs +4 -2
  96. package/__cjs/utilities/internal/index.cjs.map +1 -1
  97. package/__cjs/utilities/internal/index.d.cts +1 -0
  98. package/__cjs/utilities/internal/types/DocumentationTypes.d.cts +1 -1
  99. package/__cjs/version.cjs +1 -1
  100. package/cache/core/cache.d.ts +72 -23
  101. package/cache/core/cache.js +151 -53
  102. package/cache/core/cache.js.map +1 -1
  103. package/cache/core/types/common.d.ts +1 -1
  104. package/cache/core/types/common.js.map +1 -1
  105. package/cache/inmemory/fragmentRegistry.js +1 -1
  106. package/cache/inmemory/fragmentRegistry.js.map +1 -1
  107. package/cache/inmemory/inMemoryCache.js +12 -1
  108. package/cache/inmemory/inMemoryCache.js.map +1 -1
  109. package/core/ApolloClient.d.ts +94 -5
  110. package/core/ApolloClient.js +24 -27
  111. package/core/ApolloClient.js.map +1 -1
  112. package/core/ObservableQuery.d.ts +2 -2
  113. package/core/ObservableQuery.js +8 -4
  114. package/core/ObservableQuery.js.map +1 -1
  115. package/core/QueryManager.js +1 -1
  116. package/core/QueryManager.js.map +1 -1
  117. package/dev/setErrorMessageHandler.d.ts +1 -1
  118. package/dev/setErrorMessageHandler.js.map +1 -1
  119. package/incremental/handlers/defer20220824.d.ts +0 -2
  120. package/incremental/handlers/defer20220824.js +6 -2
  121. package/incremental/handlers/defer20220824.js.map +1 -1
  122. package/incremental/handlers/graphql17Alpha9.js +9 -3
  123. package/incremental/handlers/graphql17Alpha9.js.map +1 -1
  124. package/link/schema/index.d.ts +1 -1
  125. package/link/schema/index.js +1 -1
  126. package/link/schema/index.js.map +1 -1
  127. package/link/subscriptions/index.js +2 -1
  128. package/link/subscriptions/index.js.map +1 -1
  129. package/masking/internal/types.js.map +1 -1
  130. package/masking/maskDefinition.js +1 -1
  131. package/masking/maskDefinition.js.map +1 -1
  132. package/masking/types.d.ts +2 -1
  133. package/masking/types.js.map +1 -1
  134. package/package.json +1 -1
  135. package/react/hooks/internal/index.d.ts +1 -0
  136. package/react/hooks/internal/index.js +1 -0
  137. package/react/hooks/internal/index.js.map +1 -1
  138. package/react/hooks/internal/useDeepMemo.js +2 -0
  139. package/react/hooks/internal/useDeepMemo.js.map +1 -1
  140. package/react/hooks/internal/useRenderGuard.js +1 -1
  141. package/react/hooks/internal/useRenderGuard.js.map +1 -1
  142. package/react/hooks/internal/useSuspenseHookCacheKey.d.ts +11 -0
  143. package/react/hooks/internal/useSuspenseHookCacheKey.js +24 -0
  144. package/react/hooks/internal/useSuspenseHookCacheKey.js.map +1 -0
  145. package/react/hooks/useBackgroundQuery.js +4 -12
  146. package/react/hooks/useBackgroundQuery.js.map +1 -1
  147. package/react/hooks/useFragment.d.ts +65 -6
  148. package/react/hooks/useFragment.js +38 -87
  149. package/react/hooks/useFragment.js.map +1 -1
  150. package/react/hooks/useLazyQuery.d.ts +1 -1
  151. package/react/hooks/useLazyQuery.js +2 -0
  152. package/react/hooks/useLazyQuery.js.map +1 -1
  153. package/react/hooks/useMutation.d.ts +3 -1
  154. package/react/hooks/useQuery.d.ts +1 -1
  155. package/react/hooks/useQuery.js +1 -4
  156. package/react/hooks/useQuery.js.map +1 -1
  157. package/react/hooks/useQueryRefHandlers.js +1 -3
  158. package/react/hooks/useQueryRefHandlers.js.map +1 -1
  159. package/react/hooks/useReactiveVar.d.ts +2 -1
  160. package/react/hooks/useReactiveVar.js +2 -1
  161. package/react/hooks/useReactiveVar.js.map +1 -1
  162. package/react/hooks/useReadQuery.d.ts +1 -1
  163. package/react/hooks/useReadQuery.js +1 -3
  164. package/react/hooks/useReadQuery.js.map +1 -1
  165. package/react/hooks/useSubscription.js +1 -1
  166. package/react/hooks/useSubscription.js.map +1 -1
  167. package/react/hooks/useSuspenseFragment.d.ts +33 -7
  168. package/react/hooks/useSuspenseFragment.js +17 -17
  169. package/react/hooks/useSuspenseFragment.js.map +1 -1
  170. package/react/hooks/useSuspenseQuery.d.ts +1 -1
  171. package/react/hooks/useSuspenseQuery.js +7 -13
  172. package/react/hooks/useSuspenseQuery.js.map +1 -1
  173. package/react/hooks/useSyncExternalStore.js +1 -1
  174. package/react/hooks/useSyncExternalStore.js.map +1 -1
  175. package/react/hooks-compiled/internal/index.d.ts +1 -0
  176. package/react/hooks-compiled/internal/index.js +1 -0
  177. package/react/hooks-compiled/internal/index.js.map +1 -1
  178. package/react/hooks-compiled/internal/useDeepMemo.js +2 -0
  179. package/react/hooks-compiled/internal/useDeepMemo.js.map +1 -1
  180. package/react/hooks-compiled/internal/useRenderGuard.js +1 -1
  181. package/react/hooks-compiled/internal/useRenderGuard.js.map +1 -1
  182. package/react/hooks-compiled/internal/useSuspenseHookCacheKey.d.ts +11 -0
  183. package/react/hooks-compiled/internal/useSuspenseHookCacheKey.js +71 -0
  184. package/react/hooks-compiled/internal/useSuspenseHookCacheKey.js.map +1 -0
  185. package/react/hooks-compiled/useBackgroundQuery.js +6 -14
  186. package/react/hooks-compiled/useBackgroundQuery.js.map +1 -1
  187. package/react/hooks-compiled/useFragment.d.ts +65 -6
  188. package/react/hooks-compiled/useFragment.js +110 -88
  189. package/react/hooks-compiled/useFragment.js.map +1 -1
  190. package/react/hooks-compiled/useLazyQuery.d.ts +1 -1
  191. package/react/hooks-compiled/useLazyQuery.js +2 -0
  192. package/react/hooks-compiled/useLazyQuery.js.map +1 -1
  193. package/react/hooks-compiled/useLoadableQuery.js +69 -75
  194. package/react/hooks-compiled/useMutation.d.ts +3 -1
  195. package/react/hooks-compiled/useMutation.js +0 -12
  196. package/react/hooks-compiled/useMutation.js.map +1 -1
  197. package/react/hooks-compiled/useQuery.d.ts +1 -1
  198. package/react/hooks-compiled/useQuery.js +44 -56
  199. package/react/hooks-compiled/useQuery.js.map +1 -1
  200. package/react/hooks-compiled/useQueryRefHandlers.js +1 -5
  201. package/react/hooks-compiled/useQueryRefHandlers.js.map +1 -1
  202. package/react/hooks-compiled/useReactiveVar.d.ts +2 -1
  203. package/react/hooks-compiled/useReactiveVar.js +2 -1
  204. package/react/hooks-compiled/useReactiveVar.js.map +1 -1
  205. package/react/hooks-compiled/useReadQuery.d.ts +1 -1
  206. package/react/hooks-compiled/useReadQuery.js +77 -14
  207. package/react/hooks-compiled/useReadQuery.js.map +1 -1
  208. package/react/hooks-compiled/useSubscription.js +237 -93
  209. package/react/hooks-compiled/useSubscription.js.map +1 -1
  210. package/react/hooks-compiled/useSuspenseFragment.d.ts +33 -7
  211. package/react/hooks-compiled/useSuspenseFragment.js +17 -17
  212. package/react/hooks-compiled/useSuspenseFragment.js.map +1 -1
  213. package/react/hooks-compiled/useSuspenseQuery.d.ts +1 -1
  214. package/react/hooks-compiled/useSuspenseQuery.js +9 -19
  215. package/react/hooks-compiled/useSuspenseQuery.js.map +1 -1
  216. package/react/hooks-compiled/useSyncExternalStore.js +1 -1
  217. package/react/hooks-compiled/useSyncExternalStore.js.map +1 -1
  218. package/react/index.compiled.d.ts +1 -1
  219. package/react/index.compiled.js +1 -1
  220. package/react/index.compiled.js.map +1 -1
  221. package/react/internal/cache/FragmentReference.d.ts +2 -4
  222. package/react/internal/cache/FragmentReference.js +3 -22
  223. package/react/internal/cache/FragmentReference.js.map +1 -1
  224. package/react/internal/cache/QueryReference.d.ts +4 -0
  225. package/react/internal/cache/QueryReference.js +1 -1
  226. package/react/internal/cache/QueryReference.js.map +1 -1
  227. package/react/internal/cache/SuspenseCache.d.ts +1 -1
  228. package/react/internal/cache/SuspenseCache.js.map +1 -1
  229. package/react/internal/cache/types.d.ts +2 -2
  230. package/react/internal/cache/types.js.map +1 -1
  231. package/react/ssr/useSSRQuery.js +1 -0
  232. package/react/ssr/useSSRQuery.js.map +1 -1
  233. package/react/types/types.documentation.d.ts +4 -16
  234. package/react/types/types.documentation.js.map +1 -1
  235. package/testing/core/mocking/mockLink.d.ts +3 -1
  236. package/testing/core/mocking/mockLink.js +2 -2
  237. package/testing/core/mocking/mockLink.js.map +1 -1
  238. package/utilities/DeepPartial.d.ts +1 -1
  239. package/utilities/DeepPartial.js.map +1 -1
  240. package/utilities/internal/combineLatestBatched.d.ts +14 -0
  241. package/utilities/internal/combineLatestBatched.js +68 -0
  242. package/utilities/internal/combineLatestBatched.js.map +1 -0
  243. package/utilities/internal/getMemoryInternals.js.map +1 -1
  244. package/utilities/internal/globals/global.js +2 -2
  245. package/utilities/internal/globals/global.js.map +1 -1
  246. package/utilities/internal/index.d.ts +1 -0
  247. package/utilities/internal/index.js +1 -0
  248. package/utilities/internal/index.js.map +1 -1
  249. package/utilities/internal/types/DocumentationTypes.d.ts +1 -1
  250. package/version.js +1 -1
@@ -1,6 +1,6 @@
1
1
  import type { ApolloClient, DataValue, DocumentNode, GetDataState, OperationVariables, TypedDocumentNode } from "@apollo/client";
2
- import type { MissingTree, Reference, StoreObject } from "@apollo/client/cache";
3
- import type { FragmentType, MaybeMasked } from "@apollo/client/masking";
2
+ import type { ApolloCache, MissingTree } from "@apollo/client/cache";
3
+ import type { MaybeMasked } from "@apollo/client/masking";
4
4
  import type { NoInfer } from "@apollo/client/utilities/internal";
5
5
  export declare namespace useFragment {
6
6
  import _self = useFragment;
@@ -23,9 +23,11 @@ export declare namespace useFragment {
23
23
  */
24
24
  variables?: NoInfer<TVariables>;
25
25
  /**
26
- * An object containing a `__typename` and primary key fields (such as `id`) identifying the entity object from which the fragment will be retrieved, or a `{ __ref: "..." }` reference, or a `string` ID (uncommon).
26
+ * An object or array containing a `__typename` and primary key fields
27
+ * (such as `id`) identifying the entity object from which the fragment will
28
+ * be retrieved, or a `{ __ref: "..." }` reference, or a `string` ID (uncommon).
27
29
  */
28
- from: StoreObject | Reference | FragmentType<NoInfer<TData>> | string | null;
30
+ from: useFragment.FromValue<TData> | Array<useFragment.FromValue<TData>>;
29
31
  /**
30
32
  * Whether to read from optimistic or non-optimistic cache data. If
31
33
  * this named option is provided, the optimistic parameter of the
@@ -50,6 +52,10 @@ export declare namespace useFragment {
50
52
  }
51
53
  }
52
54
  }
55
+ /**
56
+ * Acceptable values provided to the `from` option.
57
+ */
58
+ type FromValue<TData> = ApolloCache.WatchFragmentFromValue<TData>;
53
59
  type Result<TData> = ({
54
60
  /**
55
61
  *
@@ -59,7 +65,7 @@ export declare namespace useFragment {
59
65
  * A tree of all `MissingFieldError` messages reported during fragment reading, where the branches of the tree indicate the paths of the errors within the query result.
60
66
  */
61
67
  missing?: never;
62
- } & GetDataState<MaybeMasked<TData>, "complete">) | ({
68
+ } & GetDataState<MaybeMasked<TData>, "complete">) | {
63
69
  /**
64
70
  *
65
71
  */
@@ -68,7 +74,30 @@ export declare namespace useFragment {
68
74
  * A tree of all `MissingFieldError` messages reported during fragment reading, where the branches of the tree indicate the paths of the errors within the query result.
69
75
  */
70
76
  missing?: MissingTree;
71
- } & GetDataState<MaybeMasked<TData>, "partial">);
77
+ /**
78
+ * An object containing the result of your GraphQL query after it completes.
79
+ *
80
+ * This value might be `undefined` if a query results in one or more errors (depending on the query's `errorPolicy`).
81
+ *
82
+ * @docGroup 1. Operation data
83
+ */
84
+ data: TData extends Array<infer TItem> ? Array<DataValue.Partial<TItem> | null> : DataValue.Partial<TData>;
85
+ /**
86
+ * Describes the completeness of `data`.
87
+ *
88
+ * - `empty`: No data could be fulfilled from the cache or the result is
89
+ * incomplete. `data` is `undefined`.
90
+ * - `partial`: Some data could be fulfilled from the cache but `data` is
91
+ * incomplete. This is only possible when `returnPartialData` is `true`.
92
+ * - `streaming`: `data` is incomplete as a result of a deferred query and
93
+ * the result is still streaming in.
94
+ * - `complete`: `data` is a fully satisfied query result fulfilled
95
+ * either from the cache or network.
96
+ *
97
+ * @docGroup 1. Operation data
98
+ */
99
+ dataState: "partial";
100
+ };
72
101
  namespace DocumentationTypes {
73
102
  namespace useFragment {
74
103
  interface Result<TData> {
@@ -99,5 +128,35 @@ export declare namespace useFragment {
99
128
  *
100
129
  * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.
101
130
  */
131
+ export declare function useFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: useFragment.Options<TData, TVariables> & {
132
+ from: Array<NonNullable<useFragment.FromValue<TData>>>;
133
+ }): useFragment.Result<Array<TData>>;
134
+ /**
135
+ * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.
136
+ *
137
+ * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.
138
+ *
139
+ * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.
140
+ */
141
+ export declare function useFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: useFragment.Options<TData, TVariables> & {
142
+ from: Array<null>;
143
+ }): useFragment.Result<Array<null>>;
144
+ /**
145
+ * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.
146
+ *
147
+ * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.
148
+ *
149
+ * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.
150
+ */
151
+ export declare function useFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: useFragment.Options<TData, TVariables> & {
152
+ from: Array<useFragment.FromValue<TData>>;
153
+ }): useFragment.Result<Array<TData | null>>;
154
+ /**
155
+ * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.
156
+ *
157
+ * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.
158
+ *
159
+ * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.
160
+ */
102
161
  export declare function useFragment<TData = unknown, TVariables extends OperationVariables = OperationVariables>(options: useFragment.Options<TData, TVariables>): useFragment.Result<TData>;
103
162
  //# sourceMappingURL=useFragment.d.ts.map
@@ -1,103 +1,125 @@
1
- import { equal } from "@wry/equality";
1
+ import { c as _c } from "@apollo/client/react/internal/compiler-runtime";
2
2
  import * as React from "react";
3
3
  import { useDeepMemo, wrapHook } from "./internal/index.js";
4
4
  import { useApolloClient } from "./useApolloClient.js";
5
5
  import { useSyncExternalStore } from "./useSyncExternalStore.js";
6
- /**
7
- * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.
8
- *
9
- * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.
10
- *
11
- * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.
12
- */
13
6
  export function useFragment(options) {
14
7
  "use no memo";
15
- return wrapHook("useFragment",
16
- // eslint-disable-next-line react-compiler/react-compiler
17
- useFragment_, useApolloClient(options.client))(options);
8
+ return wrapHook("useFragment", useFragment_, useApolloClient(options.client))(options);
18
9
  }
19
10
  function useFragment_(options) {
11
+ const $ = _c(19);
20
12
  const client = useApolloClient(options.client);
21
- const { cache } = client;
22
- const { from, ...rest } = options;
23
- // We calculate the cache id seperately from `stableOptions` because we don't
24
- // want changes to non key fields in the `from` property to affect
25
- // `stableOptions` and retrigger our subscription. If the cache identifier
26
- // stays the same between renders, we want to reuse the existing subscription.
27
- const id = React.useMemo(() => typeof from === "string" ? from
28
- : from === null ? null
29
- : cache.identify(from), [cache, from]);
30
- const stableOptions = useDeepMemo(() => ({ ...rest, from: id }), [rest, id]);
31
- // Since .next is async, we need to make sure that we
32
- // get the correct diff on the next render given new diffOptions
33
- const diff_0 = React.useMemo(() => {
34
- const { fragment, fragmentName, from: from_0, optimistic = true } = stableOptions;
35
- if (from_0 === null) {
36
- return {
37
- result: diffToResult({
38
- result: {},
39
- complete: false,
40
- }),
41
- };
42
- }
43
- const { cache: cache_0 } = client;
44
- const diff = cache_0.diff({
45
- ...stableOptions,
46
- returnPartialData: true,
47
- id: from_0,
48
- query: cache_0["getFragmentDoc"](client["transform"](fragment), fragmentName),
49
- optimistic,
50
- });
51
- return {
52
- result: diffToResult({
53
- ...diff,
54
- result: client["queryManager"].maskFragment({
55
- fragment,
56
- fragmentName,
57
- // TODO: Revert to `diff.result` once `useFragment` supports `null` as
58
- // valid return value
59
- data: diff.result === null ? {} : diff.result,
60
- }),
61
- }),
62
- };
63
- }, [client, stableOptions]);
64
- // Used for both getSnapshot and getServerSnapshot
65
- const getSnapshot = React.useCallback(() => diff_0.result, [diff_0]);
66
- return useSyncExternalStore(React.useCallback((forceUpdate) => {
67
- let lastTimeout = 0;
68
- const subscription = stableOptions.from === null ?
69
- null
70
- : client.watchFragment(stableOptions).subscribe({
71
- next: (result) => {
72
- // Avoid unnecessarily rerendering this hook for the initial result
73
- // emitted from watchFragment which should be equal to
74
- // `diff.result`.
75
- if (equal(result, diff_0.result))
76
- return;
77
- diff_0.result = result;
78
- // If we get another update before we've re-rendered, bail out of
79
- // the update and try again. This ensures that the relative timing
80
- // between useQuery and useFragment stays roughly the same as
81
- // fixed in https://github.com/apollographql/apollo-client/pull/11083
13
+ let from;
14
+ let rest;
15
+
16
+ if ($[0] !== options) {
17
+ ({
18
+ from,
19
+ ...rest
20
+ } = options);
21
+ $[0] = options;
22
+ $[1] = from;
23
+ $[2] = rest;
24
+ } else {
25
+ from = $[1];
26
+ rest = $[2];
27
+ }
28
+
29
+ const {
30
+ cache
31
+ } = client;
32
+ let t0;
33
+ let t1;
34
+
35
+ if ($[3] !== cache || $[4] !== from) {
36
+ t0 = () => {
37
+ const fromArray = Array.isArray(from) ? from : [from];
38
+ const ids = fromArray.map(
39
+ value => typeof value === "string" ? value : value === null ? null : cache.identify(value)
40
+ );
41
+ return Array.isArray(from) ? ids : ids[0];
42
+ };t1 = [cache, from];
43
+ $[3] = cache;
44
+ $[4] = from;
45
+ $[5] = t0;
46
+ $[6] = t1;
47
+ } else {
48
+ t0 = $[5];
49
+ t1 = $[6];
50
+ }
51
+
52
+ const ids_0 = useDeepMemo(t0, t1);
53
+ let t2;
54
+ let t3;
55
+
56
+ if ($[7] !== ids_0 || $[8] !== rest) {
57
+ t2 = () => ({
58
+ ...rest,
59
+ from: ids_0
60
+ });t3 = [rest, ids_0];
61
+ $[7] = ids_0;
62
+ $[8] = rest;
63
+ $[9] = t2;
64
+ $[10] = t3;
65
+ } else {
66
+ t2 = $[9];
67
+ t3 = $[10];
68
+ }
69
+
70
+ const stableOptions = useDeepMemo(t2, t3);
71
+ let t4;
72
+
73
+ if ($[11] !== client || $[12] !== stableOptions) {
74
+ t4 = client.watchFragment(stableOptions);
75
+ $[11] = client;
76
+ $[12] = stableOptions;
77
+ $[13] = t4;
78
+ } else {
79
+ t4 = $[13];
80
+ }
81
+
82
+ const observable = t4;
83
+ let t5;
84
+
85
+ if ($[14] !== from || $[15] !== observable) {
86
+ t5 = () => from === null ? nullResult : observable.getCurrentResult();
87
+ $[14] = from;
88
+ $[15] = observable;
89
+ $[16] = t5;
90
+ } else {
91
+ t5 = $[16];
92
+ }
93
+
94
+ const getSnapshot = t5;
95
+ let t6;
96
+
97
+ if ($[17] !== observable) {
98
+ t6 = update => {
99
+ let lastTimeout = 0;
100
+ const subscription = observable.subscribe({
101
+ next: () => {
82
102
  clearTimeout(lastTimeout);
83
- lastTimeout = setTimeout(forceUpdate);
84
- },
103
+ lastTimeout = setTimeout(update);
104
+ }
85
105
  });
86
- return () => {
87
- subscription?.unsubscribe();
88
- clearTimeout(lastTimeout);
106
+
107
+ return () => {
108
+ subscription.unsubscribe();
109
+ clearTimeout(lastTimeout);
110
+ };
89
111
  };
90
- }, [client, stableOptions, diff_0]), getSnapshot, getSnapshot);
91
- }
92
- function diffToResult(diff) {
93
- const result = {
94
- data: diff.result,
95
- complete: !!diff.complete,
96
- dataState: diff.complete ? "complete" : "partial",
97
- }; // TODO: Remove assertion once useFragment returns null
98
- if (diff.missing) {
99
- result.missing = diff.missing.missing;
112
+ $[17] = observable;
113
+ $[18] = t6;
114
+ } else {
115
+ t6 = $[18];
100
116
  }
101
- return result;
117
+
118
+ return useSyncExternalStore(t6, getSnapshot, getSnapshot);
102
119
  }
120
+ const nullResult = Object.freeze({
121
+ data: {},
122
+ dataState: "partial",
123
+ complete: false,
124
+ });
103
125
  //# sourceMappingURL=useFragment.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFragment.js","sources":["../../../src/react/hooks/useFragment.ts"],"sourcesContent":["import { equal } from \"@wry/equality\";\nimport * as React from \"react\";\n\nimport type {\n ApolloClient,\n DataValue,\n DocumentNode,\n GetDataState,\n OperationVariables,\n TypedDocumentNode,\n} from \"@apollo/client\";\nimport type {\n Cache,\n MissingTree,\n Reference,\n StoreObject,\n} from \"@apollo/client/cache\";\nimport type { FragmentType, MaybeMasked } from \"@apollo/client/masking\";\nimport type { NoInfer } from \"@apollo/client/utilities/internal\";\n\nimport { useDeepMemo, wrapHook } from \"./internal/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\n\nexport declare namespace useFragment {\n import _self = useFragment;\n export interface Options<TData, TVariables extends OperationVariables> {\n /**\n * A GraphQL document created using the `gql` template string tag from\n * `graphql-tag` with one or more fragments which will be used to determine\n * the shape of data to read. If you provide more than one fragment in this\n * document then you must also specify `fragmentName` to select a single.\n */\n fragment: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /**\n * The name of the fragment in your GraphQL document to be used. If you do\n * not provide a `fragmentName` and there is only one fragment in your\n * `fragment` document then that fragment will be used.\n */\n fragmentName?: string;\n\n /**\n * Any variables that the GraphQL query may depend on.\n */\n variables?: NoInfer<TVariables>;\n\n /**\n * An object containing a `__typename` and primary key fields (such as `id`) identifying the entity object from which the fragment will be retrieved, or a `{ __ref: \"...\" }` reference, or a `string` ID (uncommon).\n */\n from:\n | StoreObject\n | Reference\n | FragmentType<NoInfer<TData>>\n | string\n | null;\n\n /**\n * Whether to read from optimistic or non-optimistic cache data. If\n * this named option is provided, the optimistic parameter of the\n * readQuery method can be omitted.\n *\n * @defaultValue true\n */\n optimistic?: boolean;\n\n /**\n * The instance of `ApolloClient` to use to look up the fragment.\n *\n * By default, the instance that's passed down via context is used, but you\n * can provide a different instance here.\n *\n * @docGroup 1. Operation options\n */\n client?: ApolloClient;\n }\n\n namespace DocumentationTypes {\n namespace useFragment {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends _self.Options<TData, TVariables> {}\n }\n }\n\n // TODO: Update this to return `null` when there is no data returned from the\n // fragment.\n export type Result<TData> =\n | ({\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#complete:member} */\n complete: true;\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#missing:member} */\n missing?: never;\n } & GetDataState<MaybeMasked<TData>, \"complete\">)\n | ({\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#complete:member} */\n complete: false;\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#missing:member} */\n missing?: MissingTree;\n } & GetDataState<MaybeMasked<TData>, \"partial\">);\n\n export namespace DocumentationTypes {\n namespace useFragment {\n export interface Result<TData> {\n data: MaybeMasked<TData> | DataValue.Partial<MaybeMasked<TData>>;\n complete: boolean;\n /**\n * A tree of all `MissingFieldError` messages reported during fragment reading, where the branches of the tree indicate the paths of the errors within the query result.\n */\n missing?: MissingTree;\n }\n }\n }\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useFragment:function(1)} */\n export function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n >({\n fragment,\n from,\n fragmentName,\n variables,\n optimistic,\n client,\n }: useFragment.Options<TData, TVariables>): useFragment.Result<TData>;\n }\n}\n\n/**\n * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.\n *\n * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.\n *\n * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.\n */\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(options: useFragment.Options<TData, TVariables>): useFragment.Result<TData> {\n \"use no memo\";\n return wrapHook(\n \"useFragment\",\n // eslint-disable-next-line react-compiler/react-compiler\n useFragment_,\n useApolloClient(options.client)\n )(options);\n}\n\nfunction useFragment_<TData, TVariables extends OperationVariables>(\n options: useFragment.Options<TData, TVariables>\n): useFragment.Result<TData> {\n const client = useApolloClient(options.client);\n const { cache } = client;\n const { from, ...rest } = options;\n\n // We calculate the cache id seperately from `stableOptions` because we don't\n // want changes to non key fields in the `from` property to affect\n // `stableOptions` and retrigger our subscription. If the cache identifier\n // stays the same between renders, we want to reuse the existing subscription.\n const id = React.useMemo(\n () =>\n typeof from === \"string\" ? from\n : from === null ? null\n : cache.identify(from),\n [cache, from]\n );\n\n const stableOptions = useDeepMemo(() => ({ ...rest, from: id! }), [rest, id]);\n\n // Since .next is async, we need to make sure that we\n // get the correct diff on the next render given new diffOptions\n const diff = React.useMemo(() => {\n const { fragment, fragmentName, from, optimistic = true } = stableOptions;\n\n if (from === null) {\n return {\n result: diffToResult({\n result: {},\n complete: false,\n } as Cache.DiffResult<TData>),\n };\n }\n\n const { cache } = client;\n const diff = cache.diff<TData, TVariables>({\n ...stableOptions,\n returnPartialData: true,\n id: from,\n query: cache[\"getFragmentDoc\"](\n client[\"transform\"](fragment),\n fragmentName\n ),\n optimistic,\n });\n\n return {\n result: diffToResult<TData>({\n ...diff,\n result: client[\"queryManager\"].maskFragment({\n fragment,\n fragmentName,\n // TODO: Revert to `diff.result` once `useFragment` supports `null` as\n // valid return value\n data: diff.result === null ? {} : diff.result,\n }) as any,\n }),\n };\n }, [client, stableOptions]);\n\n // Used for both getSnapshot and getServerSnapshot\n const getSnapshot = React.useCallback(() => diff.result, [diff]);\n\n return useSyncExternalStore(\n React.useCallback(\n (forceUpdate) => {\n let lastTimeout = 0;\n\n const subscription =\n stableOptions.from === null ?\n null\n : client.watchFragment(stableOptions).subscribe({\n next: (result) => {\n // Avoid unnecessarily rerendering this hook for the initial result\n // emitted from watchFragment which should be equal to\n // `diff.result`.\n if (equal(result, diff.result)) return;\n diff.result = result;\n // If we get another update before we've re-rendered, bail out of\n // the update and try again. This ensures that the relative timing\n // between useQuery and useFragment stays roughly the same as\n // fixed in https://github.com/apollographql/apollo-client/pull/11083\n clearTimeout(lastTimeout);\n lastTimeout = setTimeout(forceUpdate) as any;\n },\n });\n return () => {\n subscription?.unsubscribe();\n clearTimeout(lastTimeout);\n };\n },\n [client, stableOptions, diff]\n ),\n getSnapshot,\n getSnapshot\n );\n}\n\nfunction diffToResult<TData>(\n diff: Cache.DiffResult<TData>\n): useFragment.Result<TData> {\n const result = {\n data: diff.result,\n complete: !!diff.complete,\n dataState: diff.complete ? \"complete\" : \"partial\",\n } as useFragment.Result<TData>; // TODO: Remove assertion once useFragment returns null\n\n if (diff.missing) {\n result.missing = diff.missing.missing;\n }\n\n return result;\n}\n"],"names":[],"mappings":"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EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA;oBACgB,CAAhB,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;oBACgB,CAAhB,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA;oBACgB,CAAhB,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;oBACgB,CAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA4B,CAAC,CAA7B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwC,CAAC;oBACzB,CAAhB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAA8B,CAA9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwC,CAAC,CAAzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoD,CAAQ;gBAC9C,CAAC;YACf,CAAa,CAAC;QACN,CAAR,CAAA,CAAA,CAAA,CAAA,EAAe,CAAf,EAAkB,CAAlB,EAAA;YACU,CAAV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAtB,CAAwB,CAAxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmC,CAAnC,CAAqC;YAC3B,CAAV,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAC,CAAvB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkC,CAAC;QAC3B,CAAC;IACH,CAAC,EACD,CAAC,CADP,CAAA,CAAA,CAAA,CAAA,CACa,EAAE,CADf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC4B,QAAM,CAAC,CAC9B,EACD,CAHJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAGe,EACX,CAJJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAIe;AAEf;SAES,CAAT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EACE,CADF,CAAA,CAAA,GAAA;IAGE,CAAF,CAAA,CAAA,CAAA,EAAQ,CAAR,CAAA,CAAA,CAAA,CAAA,EAAA,EAAiB;QACb,CAAJ,CAAA,CAAA,CAAQ,EAAE,CAAV,CAAA,CAAA,CAAc,CAAC,CAAf,CAAA,CAAA,CAAA,CAAA,CAAqB;QACjB,CAAJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,EAAE,CAAC,CAAC,CAAhB,CAAA,CAAA,CAAoB,CAAC,CAArB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA6B;QACzB,CAAJ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,EAAE,CAAf,CAAA,CAAA,CAAmB,CAAC,CAApB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAA6B,EAAE,CAA/B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAA0C,EAAE,CAA5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqD;IACrD,CAAgC,EAAE,CAAlC,EAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA;IAEE,CAAF,EAAA,CAAM,CAAN,CAAA,CAAA,CAAU,CAAC,CAAX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,EAAE;QAChB,CAAJ,CAAA,CAAA,CAAA,CAAA,CAAU,CAAC,CAAX,CAAA,CAAA,CAAA,CAAA,CAAA,EAAA,EAAqB,CAArB,CAAA,CAAA,CAAyB,CAAC,CAA1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiC,CAAC,CAAlC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAyC;IACvC;IAEA,CAAF,CAAA,CAAA,CAAA,CAAA,EAAS,CAAT,CAAA,CAAA,CAAA,CAAA,CAAe;AACf;"}
1
+ {"version":3,"file":"useFragment.js","sources":["../../../src/react/hooks/useFragment.ts"],"sourcesContent":["import * as React from \"react\";\n\nimport type {\n ApolloClient,\n DataValue,\n DocumentNode,\n GetDataState,\n OperationVariables,\n TypedDocumentNode,\n} from \"@apollo/client\";\nimport type { ApolloCache, MissingTree } from \"@apollo/client/cache\";\nimport type { MaybeMasked } from \"@apollo/client/masking\";\nimport type { NoInfer } from \"@apollo/client/utilities/internal\";\n\nimport { useDeepMemo, wrapHook } from \"./internal/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\n\nexport declare namespace useFragment {\n import _self = useFragment;\n\n export interface Options<TData, TVariables extends OperationVariables> {\n /**\n * A GraphQL document created using the `gql` template string tag from\n * `graphql-tag` with one or more fragments which will be used to determine\n * the shape of data to read. If you provide more than one fragment in this\n * document then you must also specify `fragmentName` to select a single.\n */\n fragment: DocumentNode | TypedDocumentNode<TData, TVariables>;\n\n /**\n * The name of the fragment in your GraphQL document to be used. If you do\n * not provide a `fragmentName` and there is only one fragment in your\n * `fragment` document then that fragment will be used.\n */\n fragmentName?: string;\n\n /**\n * Any variables that the GraphQL query may depend on.\n */\n variables?: NoInfer<TVariables>;\n\n /**\n * An object or array containing a `__typename` and primary key fields\n * (such as `id`) identifying the entity object from which the fragment will\n * be retrieved, or a `{ __ref: \"...\" }` reference, or a `string` ID (uncommon).\n */\n from: useFragment.FromValue<TData> | Array<useFragment.FromValue<TData>>;\n\n /**\n * Whether to read from optimistic or non-optimistic cache data. If\n * this named option is provided, the optimistic parameter of the\n * readQuery method can be omitted.\n *\n * @defaultValue true\n */\n optimistic?: boolean;\n\n /**\n * The instance of `ApolloClient` to use to look up the fragment.\n *\n * By default, the instance that's passed down via context is used, but you\n * can provide a different instance here.\n *\n * @docGroup 1. Operation options\n */\n client?: ApolloClient;\n }\n\n namespace DocumentationTypes {\n namespace useFragment {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends _self.Options<TData, TVariables> {}\n }\n }\n\n /**\n * Acceptable values provided to the `from` option.\n */\n export type FromValue<TData> = ApolloCache.WatchFragmentFromValue<TData>;\n\n // TODO: Update this to return `null` when there is no data returned from the\n // fragment.\n export type Result<TData> =\n | ({\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#complete:member} */\n complete: true;\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#missing:member} */\n missing?: never;\n } & GetDataState<MaybeMasked<TData>, \"complete\">)\n | {\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#complete:member} */\n complete: false;\n /** {@inheritDoc @apollo/client/react!useFragment.DocumentationTypes.useFragment.Result#missing:member} */\n missing?: MissingTree;\n /** {@inheritDoc @apollo/client!QueryResultDocumentation#data:member} */\n data: TData extends Array<infer TItem> ?\n Array<DataValue.Partial<TItem> | null>\n : DataValue.Partial<TData>;\n /** {@inheritDoc @apollo/client!QueryResultDocumentation#dataState:member} */\n dataState: \"partial\";\n };\n\n export namespace DocumentationTypes {\n namespace useFragment {\n export interface Result<TData> {\n data: MaybeMasked<TData> | DataValue.Partial<MaybeMasked<TData>>;\n complete: boolean;\n /**\n * A tree of all `MissingFieldError` messages reported during fragment reading, where the branches of the tree indicate the paths of the errors within the query result.\n */\n missing?: MissingTree;\n }\n }\n }\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useFragment:function(1)} */\n export function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n >({\n fragment,\n from,\n fragmentName,\n variables,\n optimistic,\n client,\n }: useFragment.Options<TData, TVariables>): useFragment.Result<TData>;\n }\n}\n\n/**\n * `useFragment` represents a lightweight live binding into the Apollo Client Cache and enables Apollo Client to broadcast very specific fragment results to individual components. This hook returns an always-up-to-date view of whatever data the cache currently contains for a given fragment. `useFragment` never triggers network requests of its own.\n *\n * Note that the `useQuery` hook remains the primary hook responsible for querying and populating data in the cache ([see the API reference](./hooks#usequery)). As a result, the component reading the fragment data via `useFragment` is still subscribed to all changes in the query data, but receives updates only when that fragment's specific data change.\n *\n * To view a `useFragment` example, see the [Fragments](https://www.apollographql.com/docs/react/data/fragments#usefragment) page.\n */\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useFragment.Options<TData, TVariables> & {\n from: Array<NonNullable<useFragment.FromValue<TData>>>;\n }\n): useFragment.Result<Array<TData>>;\n\n/** {@inheritDoc @apollo/client/react!useFragment:function(1)} */\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useFragment.Options<TData, TVariables> & {\n from: Array<null>;\n }\n): useFragment.Result<Array<null>>;\n\n/** {@inheritDoc @apollo/client/react!useFragment:function(1)} */\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useFragment.Options<TData, TVariables> & {\n from: Array<useFragment.FromValue<TData>>;\n }\n): useFragment.Result<Array<TData | null>>;\n\n/** {@inheritDoc @apollo/client/react!useFragment:function(1)} */\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(options: useFragment.Options<TData, TVariables>): useFragment.Result<TData>;\n\nexport function useFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useFragment.Options<TData, TVariables>\n): useFragment.Result<TData> | useFragment.Result<Array<TData | null>> {\n \"use no memo\";\n return wrapHook(\n \"useFragment\",\n useFragment_,\n useApolloClient(options.client)\n )(options);\n}\n\nfunction useFragment_<TData, TVariables extends OperationVariables>(\n options: useFragment.Options<TData, TVariables>\n): useFragment.Result<TData> | useFragment.Result<Array<TData | null>> {\n const client = useApolloClient(options.client);\n const { from, ...rest } = options;\n const { cache } = client;\n\n // We calculate the cache id seperately because we don't want changes to non\n // key fields in the `from` property to recreate the observable. If the cache\n // identifier stays the same between renders, we want to reuse the existing\n // subscription.\n const ids = useDeepMemo(() => {\n const fromArray = Array.isArray(from) ? from : [from];\n\n const ids = fromArray.map((value) =>\n typeof value === \"string\" ? value\n : value === null ? null\n : cache.identify(value)\n );\n\n return Array.isArray(from) ? ids : ids[0];\n }, [cache, from]);\n\n const stableOptions = useDeepMemo(\n () => ({ ...rest, from: ids as any }),\n [rest, ids]\n );\n\n const observable = React.useMemo(\n () => client.watchFragment(stableOptions),\n [client, stableOptions]\n );\n\n // Unfortunately we forgot to update the use case of `from: null` on\n // useFragment in 4.0 to match `useSuspenseFragment`. As such, we need to\n // fallback to data: {} with complete: false when `from` is `null` to maintain\n // backwards compatibility. We should plan to change this in v5.\n const getSnapshot = React.useCallback(\n () => (from === null ? nullResult : observable.getCurrentResult()),\n [from, observable]\n );\n\n return useSyncExternalStore(\n React.useCallback(\n (update) => {\n let lastTimeout = 0;\n const subscription = observable.subscribe({\n next: () => {\n // If we get another update before we've re-rendered, bail out of\n // the update and try again. This ensures that the relative timing\n // between useQuery and useFragment stays roughly the same as\n // fixed in https://github.com/apollographql/apollo-client/pull/11083\n clearTimeout(lastTimeout);\n lastTimeout = setTimeout(update) as any;\n },\n });\n\n return () => {\n subscription.unsubscribe();\n clearTimeout(lastTimeout);\n };\n },\n [observable]\n ),\n getSnapshot,\n getSnapshot\n );\n}\n\nconst nullResult = Object.freeze({\n data: {},\n dataState: \"partial\",\n complete: false,\n}) as useFragment.Result<any>;\n"],"names":[],"mappings":"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"}
@@ -164,7 +164,7 @@ export declare namespace useLazyQuery {
164
164
  */
165
165
  previousData?: MaybeMasked<TData>;
166
166
  /**
167
- * A single ErrorLike object describing the error that occured during the latest
167
+ * A single ErrorLike object describing the error that occurred during the latest
168
168
  * query execution.
169
169
  *
170
170
  * For more information, see [Handling operation errors](https://www.apollographql.com/docs/react/data/error-handling/).
@@ -125,9 +125,11 @@ export function useLazyQuery(query, options) {
125
125
  ...eagerMethods_0,
126
126
  ...result_1,
127
127
  client,
128
+ // eslint-disable-next-line react-hooks/refs
128
129
  previousData: previousDataRef.current,
129
130
  variables: observable.variables,
130
131
  observable,
132
+ // eslint-disable-next-line react-hooks/refs
131
133
  called: !!resultRef.current,
132
134
  };
133
135
  }, [client, observableResult, eagerMethods_0, observable]);