@apollo/client 4.3.0-alpha.1 → 4.3.0-alpha.11

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 (416) hide show
  1. package/CHANGELOG.md +503 -0
  2. package/README.md +3 -7
  3. package/__cjs/cache/core/Scalar.cjs +36 -0
  4. package/__cjs/cache/core/Scalar.cjs.map +1 -0
  5. package/__cjs/cache/core/Scalar.d.cts +19 -0
  6. package/__cjs/cache/core/cache.cjs +32 -1
  7. package/__cjs/cache/core/cache.cjs.map +1 -1
  8. package/__cjs/cache/core/cache.d.cts +89 -6
  9. package/__cjs/cache/core/types/Cache.d.cts +25 -0
  10. package/__cjs/cache/index.cjs +3 -1
  11. package/__cjs/cache/index.cjs.map +1 -1
  12. package/__cjs/cache/index.d.cts +3 -2
  13. package/__cjs/cache/inmemory/entityStore.cjs +48 -5
  14. package/__cjs/cache/inmemory/entityStore.cjs.map +1 -1
  15. package/__cjs/cache/inmemory/entityStore.d.cts +3 -0
  16. package/__cjs/cache/inmemory/helpers.d.cts +9 -1
  17. package/__cjs/cache/inmemory/inMemoryCache.cjs +83 -4
  18. package/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  19. package/__cjs/cache/inmemory/inMemoryCache.d.cts +44 -5
  20. package/__cjs/cache/inmemory/key-extractor.cjs +1 -1
  21. package/__cjs/cache/inmemory/policies.cjs +35 -6
  22. package/__cjs/cache/inmemory/policies.cjs.map +1 -1
  23. package/__cjs/cache/inmemory/policies.d.cts +4 -1
  24. package/__cjs/cache/inmemory/readFromStore.cjs +490 -49
  25. package/__cjs/cache/inmemory/readFromStore.cjs.map +1 -1
  26. package/__cjs/cache/inmemory/readFromStore.d.cts +11 -2
  27. package/__cjs/cache/inmemory/types.d.cts +29 -4
  28. package/__cjs/cache/inmemory/writeToStore.cjs +6 -6
  29. package/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
  30. package/__cjs/core/ApolloClient.cjs +37 -38
  31. package/__cjs/core/ApolloClient.cjs.map +1 -1
  32. package/__cjs/core/ApolloClient.d.cts +44 -10
  33. package/__cjs/core/ObservableQuery.cjs +228 -76
  34. package/__cjs/core/ObservableQuery.cjs.map +1 -1
  35. package/__cjs/core/ObservableQuery.d.cts +16 -8
  36. package/__cjs/core/QueryInfo.cjs +178 -190
  37. package/__cjs/core/QueryInfo.cjs.map +1 -1
  38. package/__cjs/core/QueryInfo.d.cts +16 -21
  39. package/__cjs/core/QueryManager.cjs +88 -59
  40. package/__cjs/core/QueryManager.cjs.map +1 -1
  41. package/__cjs/core/QueryManager.d.cts +1 -3
  42. package/__cjs/core/RefetchEventManager.cjs +3 -3
  43. package/__cjs/core/dataStateErrorCache.cjs +12 -0
  44. package/__cjs/core/dataStateErrorCache.cjs.map +1 -0
  45. package/__cjs/core/dataStateErrorCache.d.cts +3 -0
  46. package/__cjs/core/index.cjs +2 -1
  47. package/__cjs/core/index.cjs.map +1 -1
  48. package/__cjs/core/index.d.cts +4 -3
  49. package/__cjs/core/types.d.cts +10 -3
  50. package/__cjs/incremental/GraphQLCodegenIncremental.cjs +3 -0
  51. package/__cjs/incremental/GraphQLCodegenIncremental.cjs.map +1 -0
  52. package/__cjs/incremental/GraphQLCodegenIncremental.d.cts +55 -0
  53. package/__cjs/incremental/handlers/defer20220824.cjs.map +1 -1
  54. package/__cjs/incremental/handlers/defer20220824.d.cts +2 -4
  55. package/__cjs/incremental/handlers/graphql17Alpha9.cjs +47 -16
  56. package/__cjs/incremental/handlers/graphql17Alpha9.cjs.map +1 -1
  57. package/__cjs/incremental/handlers/graphql17Alpha9.d.cts +29 -6
  58. package/__cjs/incremental/handlers/notImplemented.cjs +1 -1
  59. package/__cjs/incremental/index.cjs.map +1 -1
  60. package/__cjs/incremental/index.d.cts +1 -0
  61. package/__cjs/{utilities/internal/types/NoInfer.cjs → incremental/internal/types.cjs} +1 -1
  62. package/__cjs/incremental/internal/types.cjs.map +1 -0
  63. package/__cjs/incremental/internal/types.d.cts +17 -0
  64. package/__cjs/incremental/types.d.cts +55 -4
  65. package/__cjs/invariantErrorCodes.cjs +167 -112
  66. package/__cjs/link/core/ApolloLink.cjs +3 -3
  67. package/__cjs/link/http/checkFetcher.cjs +1 -1
  68. package/__cjs/link/http/parseAndCheckHttpResponse.cjs +2 -2
  69. package/__cjs/link/http/parseAndCheckHttpResponse.cjs.map +1 -1
  70. package/__cjs/link/persisted-queries/index.cjs +2 -2
  71. package/__cjs/link/ws/index.cjs +1 -1
  72. package/__cjs/local-state/LocalState.cjs +11 -11
  73. package/__cjs/local-state/LocalState.cjs.map +1 -1
  74. package/__cjs/local-state/LocalState.d.cts +1 -1
  75. package/__cjs/masking/internal/types.d.cts +1 -2
  76. package/__cjs/masking/maskDefinition.cjs +2 -2
  77. package/__cjs/masking/maskFragment.cjs +2 -2
  78. package/__cjs/masking/maskOperation.cjs +1 -1
  79. package/__cjs/masking/utils.cjs +3 -3
  80. package/__cjs/react/context/ApolloContext.cjs +1 -1
  81. package/__cjs/react/context/ApolloProvider.cjs +1 -1
  82. package/__cjs/react/hooks/internal/validateSuspenseHookOptions.cjs +2 -2
  83. package/__cjs/react/hooks/useApolloClient.cjs +1 -1
  84. package/__cjs/react/hooks/useBackgroundQuery.cjs.map +1 -1
  85. package/__cjs/react/hooks/useBackgroundQuery.d.cts +100 -47
  86. package/__cjs/react/hooks/useFragment.cjs.map +1 -1
  87. package/__cjs/react/hooks/useFragment.d.cts +0 -1
  88. package/__cjs/react/hooks/useLazyQuery.cjs +2 -2
  89. package/__cjs/react/hooks/useLazyQuery.cjs.map +1 -1
  90. package/__cjs/react/hooks/useLazyQuery.d.cts +40 -34
  91. package/__cjs/react/hooks/useLoadableQuery.cjs +2 -2
  92. package/__cjs/react/hooks/useLoadableQuery.cjs.map +1 -1
  93. package/__cjs/react/hooks/useLoadableQuery.d.cts +23 -15
  94. package/__cjs/react/hooks/useMutation.cjs.map +1 -1
  95. package/__cjs/react/hooks/useMutation.d.cts +10 -7
  96. package/__cjs/react/hooks/useQuery.cjs.map +1 -1
  97. package/__cjs/react/hooks/useQuery.d.cts +74 -32
  98. package/__cjs/react/hooks/useQueryRefHandlers.cjs.map +1 -1
  99. package/__cjs/react/hooks/useSubscription.cjs +7 -3
  100. package/__cjs/react/hooks/useSubscription.cjs.map +1 -1
  101. package/__cjs/react/hooks/useSubscription.d.cts +7 -4
  102. package/__cjs/react/hooks/useSuspenseFragment.cjs.map +1 -1
  103. package/__cjs/react/hooks/useSuspenseFragment.d.cts +1 -1
  104. package/__cjs/react/hooks/useSuspenseQuery.cjs.map +1 -1
  105. package/__cjs/react/hooks/useSuspenseQuery.d.cts +83 -34
  106. package/__cjs/react/hooks/useSyncExternalStore.cjs +1 -1
  107. package/__cjs/react/internal/cache/QueryReference.cjs +1 -1
  108. package/__cjs/react/internal/cache/QueryReference.cjs.map +1 -1
  109. package/__cjs/react/internal/types.d.cts +14 -3
  110. package/__cjs/react/query-preloader/createQueryPreloader.cjs.map +1 -1
  111. package/__cjs/react/query-preloader/createQueryPreloader.d.cts +20 -5
  112. package/__cjs/react/ssr/prerenderStatic.cjs +2 -2
  113. package/__cjs/testing/core/mocking/mockLink.cjs +25 -5
  114. package/__cjs/testing/core/mocking/mockLink.cjs.map +1 -1
  115. package/__cjs/testing/core/mocking/mockLink.d.cts +1 -2
  116. package/__cjs/utilities/caching/sizes.cjs.map +1 -1
  117. package/__cjs/utilities/caching/sizes.d.cts +39 -1
  118. package/__cjs/utilities/graphql/DocumentTransform.cjs +1 -1
  119. package/__cjs/utilities/index.cjs.map +1 -1
  120. package/__cjs/utilities/index.d.cts +1 -0
  121. package/__cjs/utilities/internal/StreamArrayState.cjs +27 -0
  122. package/__cjs/utilities/internal/StreamArrayState.cjs.map +1 -0
  123. package/__cjs/utilities/internal/StreamArrayState.d.cts +12 -0
  124. package/__cjs/utilities/internal/addDeferFragmentLabels.cjs +33 -0
  125. package/__cjs/utilities/internal/addDeferFragmentLabels.cjs.map +1 -0
  126. package/__cjs/utilities/internal/addDeferFragmentLabels.d.cts +3 -0
  127. package/__cjs/utilities/internal/capitalize.cjs +12 -0
  128. package/__cjs/utilities/internal/capitalize.cjs.map +1 -0
  129. package/__cjs/utilities/internal/capitalize.d.cts +7 -0
  130. package/__cjs/utilities/internal/coerceScalarFieldsToParsed.cjs +69 -0
  131. package/__cjs/utilities/internal/coerceScalarFieldsToParsed.cjs.map +1 -0
  132. package/__cjs/utilities/internal/coerceScalarFieldsToParsed.d.cts +9 -0
  133. package/__cjs/utilities/internal/constants.cjs +20 -1
  134. package/__cjs/utilities/internal/constants.cjs.map +1 -1
  135. package/__cjs/utilities/internal/constants.d.cts +19 -0
  136. package/__cjs/utilities/internal/getDirectiveArgValue.cjs +19 -0
  137. package/__cjs/utilities/internal/getDirectiveArgValue.cjs.map +1 -0
  138. package/__cjs/utilities/internal/getDirectiveArgValue.d.cts +9 -0
  139. package/__cjs/utilities/internal/getFragmentDefinition.cjs +3 -3
  140. package/__cjs/utilities/internal/getFragmentFromSelection.cjs +2 -2
  141. package/__cjs/utilities/internal/getFragmentFromSelection.cjs.map +1 -1
  142. package/__cjs/utilities/internal/getFragmentQueryDocument.cjs +2 -2
  143. package/__cjs/utilities/internal/getMainDefinition.cjs +1 -1
  144. package/__cjs/utilities/internal/getMemoryInternals.cjs +6 -0
  145. package/__cjs/utilities/internal/getMemoryInternals.cjs.map +1 -1
  146. package/__cjs/utilities/internal/getMemoryInternals.d.cts +4 -0
  147. package/__cjs/utilities/internal/getQueryDefinition.cjs +1 -1
  148. package/__cjs/utilities/internal/getUnwrappedType.cjs +20 -0
  149. package/__cjs/utilities/internal/getUnwrappedType.cjs.map +1 -0
  150. package/__cjs/utilities/internal/getUnwrappedType.d.cts +8 -0
  151. package/__cjs/utilities/internal/index.cjs +25 -2
  152. package/__cjs/utilities/internal/index.cjs.map +1 -1
  153. package/__cjs/utilities/internal/index.d.cts +16 -2
  154. package/__cjs/utilities/internal/isDeferredFragment.cjs +38 -0
  155. package/__cjs/utilities/internal/isDeferredFragment.cjs.map +1 -0
  156. package/__cjs/utilities/internal/isDeferredFragment.d.cts +9 -0
  157. package/__cjs/utilities/internal/isStreamField.cjs +37 -0
  158. package/__cjs/utilities/internal/isStreamField.cjs.map +1 -0
  159. package/__cjs/utilities/internal/isStreamField.d.cts +9 -0
  160. package/__cjs/utilities/internal/isTypenameField.cjs +7 -0
  161. package/__cjs/utilities/internal/isTypenameField.cjs.map +1 -0
  162. package/__cjs/utilities/internal/isTypenameField.d.cts +3 -0
  163. package/__cjs/utilities/internal/makeStreamInfoTrie.cjs +17 -0
  164. package/__cjs/utilities/internal/makeStreamInfoTrie.cjs.map +1 -0
  165. package/__cjs/utilities/internal/makeStreamInfoTrie.d.cts +8 -0
  166. package/__cjs/utilities/internal/removeDirectivesFromDocument.cjs +1 -1
  167. package/__cjs/utilities/internal/shouldInclude.cjs +4 -4
  168. package/__cjs/utilities/internal/toDiffWithDataState.cjs +20 -0
  169. package/__cjs/utilities/internal/toDiffWithDataState.cjs.map +1 -0
  170. package/__cjs/utilities/internal/toDiffWithDataState.d.cts +8 -0
  171. package/__cjs/utilities/internal/types/DeferInfo.cjs +3 -0
  172. package/__cjs/utilities/internal/types/DeferInfo.cjs.map +1 -0
  173. package/__cjs/utilities/internal/types/DeferInfo.d.cts +10 -0
  174. package/__cjs/utilities/internal/types/Exact.cjs +3 -0
  175. package/__cjs/utilities/internal/types/Exact.cjs.map +1 -0
  176. package/__cjs/utilities/internal/types/Exact.d.cts +2 -0
  177. package/__cjs/utilities/internal/types/IsLooselyEqual.cjs +3 -0
  178. package/__cjs/utilities/internal/types/IsLooselyEqual.cjs.map +1 -0
  179. package/__cjs/utilities/internal/types/IsLooselyEqual.d.cts +10 -0
  180. package/__cjs/utilities/internal/types/IsNeverish.cjs +3 -0
  181. package/__cjs/utilities/internal/types/IsNeverish.cjs.map +1 -0
  182. package/__cjs/utilities/internal/types/IsNeverish.d.cts +4 -0
  183. package/__cjs/utilities/internal/types/StreamInfoTrie.d.cts +2 -0
  184. package/__cjs/utilities/internal/valueToObjectRepresentation.cjs +1 -1
  185. package/__cjs/utilities/policies/pagination.cjs.map +1 -1
  186. package/__cjs/utilities/policies/pagination.d.cts +1 -1
  187. package/__cjs/utilities/subscriptions/relay/index.cjs +1 -0
  188. package/__cjs/utilities/subscriptions/relay/index.cjs.map +1 -1
  189. package/__cjs/version.cjs +1 -1
  190. package/__cjs/version.cjs.map +1 -1
  191. package/cache/core/Scalar.d.ts +19 -0
  192. package/cache/core/Scalar.js +32 -0
  193. package/cache/core/Scalar.js.map +1 -0
  194. package/cache/core/cache.d.ts +89 -6
  195. package/cache/core/cache.js +33 -2
  196. package/cache/core/cache.js.map +1 -1
  197. package/cache/core/types/Cache.d.ts +25 -0
  198. package/cache/core/types/Cache.js.map +1 -1
  199. package/cache/index.d.ts +3 -2
  200. package/cache/index.js +1 -0
  201. package/cache/index.js.map +1 -1
  202. package/cache/inmemory/entityStore.d.ts +3 -0
  203. package/cache/inmemory/entityStore.js +49 -6
  204. package/cache/inmemory/entityStore.js.map +1 -1
  205. package/cache/inmemory/helpers.d.ts +9 -1
  206. package/cache/inmemory/inMemoryCache.d.ts +44 -5
  207. package/cache/inmemory/inMemoryCache.js +84 -5
  208. package/cache/inmemory/inMemoryCache.js.map +1 -1
  209. package/cache/inmemory/key-extractor.js +1 -1
  210. package/cache/inmemory/policies.d.ts +4 -1
  211. package/cache/inmemory/policies.js +35 -6
  212. package/cache/inmemory/policies.js.map +1 -1
  213. package/cache/inmemory/readFromStore.d.ts +11 -2
  214. package/cache/inmemory/readFromStore.js +486 -49
  215. package/cache/inmemory/readFromStore.js.map +1 -1
  216. package/cache/inmemory/types.d.ts +30 -5
  217. package/cache/inmemory/types.js.map +1 -1
  218. package/cache/inmemory/writeToStore.js +7 -7
  219. package/cache/inmemory/writeToStore.js.map +1 -1
  220. package/core/ApolloClient.d.ts +44 -10
  221. package/core/ApolloClient.js +37 -38
  222. package/core/ApolloClient.js.map +1 -1
  223. package/core/ObservableQuery.d.ts +16 -8
  224. package/core/ObservableQuery.js +225 -77
  225. package/core/ObservableQuery.js.map +1 -1
  226. package/core/QueryInfo.d.ts +17 -22
  227. package/core/QueryInfo.js +174 -190
  228. package/core/QueryInfo.js.map +1 -1
  229. package/core/QueryManager.d.ts +1 -3
  230. package/core/QueryManager.js +89 -60
  231. package/core/QueryManager.js.map +1 -1
  232. package/core/RefetchEventManager.js +3 -3
  233. package/core/dataStateErrorCache.d.ts +3 -0
  234. package/core/dataStateErrorCache.js +9 -0
  235. package/core/dataStateErrorCache.js.map +1 -0
  236. package/core/index.d.ts +4 -3
  237. package/core/index.js +1 -1
  238. package/core/index.js.map +1 -1
  239. package/core/types.d.ts +10 -3
  240. package/core/types.js.map +1 -1
  241. package/incremental/GraphQLCodegenIncremental.d.ts +55 -0
  242. package/incremental/GraphQLCodegenIncremental.js +2 -0
  243. package/incremental/GraphQLCodegenIncremental.js.map +1 -0
  244. package/incremental/handlers/defer20220824.d.ts +2 -4
  245. package/incremental/handlers/defer20220824.js.map +1 -1
  246. package/incremental/handlers/graphql17Alpha9.d.ts +29 -6
  247. package/incremental/handlers/graphql17Alpha9.js +48 -17
  248. package/incremental/handlers/graphql17Alpha9.js.map +1 -1
  249. package/incremental/handlers/notImplemented.js +1 -1
  250. package/incremental/index.d.ts +1 -0
  251. package/incremental/index.js.map +1 -1
  252. package/incremental/internal/types.d.ts +17 -0
  253. package/incremental/internal/types.js +2 -0
  254. package/incremental/internal/types.js.map +1 -0
  255. package/incremental/types.d.ts +55 -4
  256. package/incremental/types.js.map +1 -1
  257. package/invariantErrorCodes.js +167 -112
  258. package/link/core/ApolloLink.js +3 -3
  259. package/link/http/checkFetcher.js +1 -1
  260. package/link/http/parseAndCheckHttpResponse.js +2 -2
  261. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  262. package/link/persisted-queries/index.js +2 -2
  263. package/link/ws/index.js +1 -1
  264. package/local-state/LocalState.d.ts +1 -1
  265. package/local-state/LocalState.js +11 -11
  266. package/local-state/LocalState.js.map +1 -1
  267. package/masking/internal/types.d.ts +1 -2
  268. package/masking/internal/types.js.map +1 -1
  269. package/masking/maskDefinition.js +2 -2
  270. package/masking/maskFragment.js +2 -2
  271. package/masking/maskOperation.js +1 -1
  272. package/masking/utils.js +3 -3
  273. package/package.json +1 -1
  274. package/react/context/ApolloContext.js +1 -1
  275. package/react/context/ApolloProvider.js +1 -1
  276. package/react/hooks/internal/validateSuspenseHookOptions.js +2 -2
  277. package/react/hooks/useApolloClient.js +1 -1
  278. package/react/hooks/useBackgroundQuery.d.ts +100 -47
  279. package/react/hooks/useBackgroundQuery.js.map +1 -1
  280. package/react/hooks/useFragment.d.ts +0 -1
  281. package/react/hooks/useFragment.js.map +1 -1
  282. package/react/hooks/useLazyQuery.d.ts +40 -34
  283. package/react/hooks/useLazyQuery.js +2 -2
  284. package/react/hooks/useLazyQuery.js.map +1 -1
  285. package/react/hooks/useLoadableQuery.d.ts +23 -15
  286. package/react/hooks/useLoadableQuery.js +2 -2
  287. package/react/hooks/useLoadableQuery.js.map +1 -1
  288. package/react/hooks/useMutation.d.ts +10 -7
  289. package/react/hooks/useMutation.js.map +1 -1
  290. package/react/hooks/useQuery.d.ts +74 -32
  291. package/react/hooks/useQuery.js.map +1 -1
  292. package/react/hooks/useQueryRefHandlers.js.map +1 -1
  293. package/react/hooks/useSubscription.d.ts +7 -4
  294. package/react/hooks/useSubscription.js +7 -3
  295. package/react/hooks/useSubscription.js.map +1 -1
  296. package/react/hooks/useSuspenseFragment.d.ts +1 -1
  297. package/react/hooks/useSuspenseFragment.js.map +1 -1
  298. package/react/hooks/useSuspenseQuery.d.ts +83 -34
  299. package/react/hooks/useSuspenseQuery.js.map +1 -1
  300. package/react/hooks/useSyncExternalStore.js +1 -1
  301. package/react/hooks-compiled/internal/validateSuspenseHookOptions.js +2 -2
  302. package/react/hooks-compiled/useApolloClient.js +1 -1
  303. package/react/hooks-compiled/useBackgroundQuery.d.ts +100 -47
  304. package/react/hooks-compiled/useBackgroundQuery.js.map +1 -1
  305. package/react/hooks-compiled/useFragment.d.ts +0 -1
  306. package/react/hooks-compiled/useFragment.js.map +1 -1
  307. package/react/hooks-compiled/useLazyQuery.d.ts +40 -34
  308. package/react/hooks-compiled/useLazyQuery.js +2 -2
  309. package/react/hooks-compiled/useLazyQuery.js.map +1 -1
  310. package/react/hooks-compiled/useLoadableQuery.d.ts +23 -15
  311. package/react/hooks-compiled/useLoadableQuery.js +2 -2
  312. package/react/hooks-compiled/useLoadableQuery.js.map +1 -1
  313. package/react/hooks-compiled/useMutation.d.ts +10 -7
  314. package/react/hooks-compiled/useMutation.js.map +1 -1
  315. package/react/hooks-compiled/useQuery.d.ts +74 -32
  316. package/react/hooks-compiled/useQuery.js.map +1 -1
  317. package/react/hooks-compiled/useQueryRefHandlers.js.map +1 -1
  318. package/react/hooks-compiled/useSubscription.d.ts +7 -4
  319. package/react/hooks-compiled/useSubscription.js +107 -93
  320. package/react/hooks-compiled/useSubscription.js.map +1 -1
  321. package/react/hooks-compiled/useSuspenseFragment.d.ts +1 -1
  322. package/react/hooks-compiled/useSuspenseFragment.js.map +1 -1
  323. package/react/hooks-compiled/useSuspenseQuery.d.ts +83 -34
  324. package/react/hooks-compiled/useSuspenseQuery.js.map +1 -1
  325. package/react/hooks-compiled/useSyncExternalStore.js +1 -1
  326. package/react/internal/cache/QueryReference.js +1 -1
  327. package/react/internal/cache/QueryReference.js.map +1 -1
  328. package/react/internal/types.d.ts +15 -4
  329. package/react/internal/types.js.map +1 -1
  330. package/react/query-preloader/createQueryPreloader.d.ts +20 -5
  331. package/react/query-preloader/createQueryPreloader.js.map +1 -1
  332. package/react/ssr/prerenderStatic.js +2 -2
  333. package/testing/core/mocking/mockLink.d.ts +1 -2
  334. package/testing/core/mocking/mockLink.js +25 -5
  335. package/testing/core/mocking/mockLink.js.map +1 -1
  336. package/utilities/caching/sizes.d.ts +39 -1
  337. package/utilities/caching/sizes.js.map +1 -1
  338. package/utilities/graphql/DocumentTransform.js +1 -1
  339. package/utilities/index.d.ts +1 -0
  340. package/utilities/index.js.map +1 -1
  341. package/utilities/internal/StreamArrayState.d.ts +12 -0
  342. package/utilities/internal/StreamArrayState.js +23 -0
  343. package/utilities/internal/StreamArrayState.js.map +1 -0
  344. package/utilities/internal/addDeferFragmentLabels.d.ts +3 -0
  345. package/utilities/internal/addDeferFragmentLabels.js +30 -0
  346. package/utilities/internal/addDeferFragmentLabels.js.map +1 -0
  347. package/utilities/internal/capitalize.d.ts +7 -0
  348. package/utilities/internal/capitalize.js +9 -0
  349. package/utilities/internal/capitalize.js.map +1 -0
  350. package/utilities/internal/coerceScalarFieldsToParsed.d.ts +9 -0
  351. package/utilities/internal/coerceScalarFieldsToParsed.js +66 -0
  352. package/utilities/internal/coerceScalarFieldsToParsed.js.map +1 -0
  353. package/utilities/internal/constants.d.ts +19 -0
  354. package/utilities/internal/constants.js +19 -0
  355. package/utilities/internal/constants.js.map +1 -1
  356. package/utilities/internal/getDirectiveArgValue.d.ts +9 -0
  357. package/utilities/internal/getDirectiveArgValue.js +16 -0
  358. package/utilities/internal/getDirectiveArgValue.js.map +1 -0
  359. package/utilities/internal/getFragmentDefinition.js +3 -3
  360. package/utilities/internal/getFragmentFromSelection.js +2 -2
  361. package/utilities/internal/getFragmentFromSelection.js.map +1 -1
  362. package/utilities/internal/getFragmentQueryDocument.js +2 -2
  363. package/utilities/internal/getMainDefinition.js +1 -1
  364. package/utilities/internal/getMemoryInternals.d.ts +4 -0
  365. package/utilities/internal/getMemoryInternals.js +6 -0
  366. package/utilities/internal/getMemoryInternals.js.map +1 -1
  367. package/utilities/internal/getQueryDefinition.js +1 -1
  368. package/utilities/internal/getUnwrappedType.d.ts +8 -0
  369. package/utilities/internal/getUnwrappedType.js +17 -0
  370. package/utilities/internal/getUnwrappedType.js.map +1 -0
  371. package/utilities/internal/index.d.ts +16 -2
  372. package/utilities/internal/index.js +12 -1
  373. package/utilities/internal/index.js.map +1 -1
  374. package/utilities/internal/isDeferredFragment.d.ts +9 -0
  375. package/utilities/internal/isDeferredFragment.js +35 -0
  376. package/utilities/internal/isDeferredFragment.js.map +1 -0
  377. package/utilities/internal/isStreamField.d.ts +9 -0
  378. package/utilities/internal/isStreamField.js +34 -0
  379. package/utilities/internal/isStreamField.js.map +1 -0
  380. package/utilities/internal/isTypenameField.d.ts +3 -0
  381. package/utilities/internal/isTypenameField.js +4 -0
  382. package/utilities/internal/isTypenameField.js.map +1 -0
  383. package/utilities/internal/makeStreamInfoTrie.d.ts +8 -0
  384. package/utilities/internal/makeStreamInfoTrie.js +14 -0
  385. package/utilities/internal/makeStreamInfoTrie.js.map +1 -0
  386. package/utilities/internal/removeDirectivesFromDocument.js +1 -1
  387. package/utilities/internal/shouldInclude.js +4 -4
  388. package/utilities/internal/toDiffWithDataState.d.ts +8 -0
  389. package/utilities/internal/toDiffWithDataState.js +17 -0
  390. package/utilities/internal/toDiffWithDataState.js.map +1 -0
  391. package/utilities/internal/types/DeferInfo.d.ts +10 -0
  392. package/utilities/internal/types/DeferInfo.js +2 -0
  393. package/utilities/internal/types/DeferInfo.js.map +1 -0
  394. package/utilities/internal/types/Exact.d.ts +2 -0
  395. package/utilities/internal/types/Exact.js +2 -0
  396. package/utilities/internal/types/Exact.js.map +1 -0
  397. package/utilities/internal/types/IsLooselyEqual.d.ts +10 -0
  398. package/utilities/internal/types/IsLooselyEqual.js +2 -0
  399. package/utilities/internal/types/IsLooselyEqual.js.map +1 -0
  400. package/utilities/internal/types/IsNeverish.d.ts +4 -0
  401. package/utilities/internal/types/IsNeverish.js +2 -0
  402. package/utilities/internal/types/IsNeverish.js.map +1 -0
  403. package/utilities/internal/types/StreamInfoTrie.d.ts +2 -0
  404. package/utilities/internal/types/StreamInfoTrie.js.map +1 -1
  405. package/utilities/internal/valueToObjectRepresentation.js +1 -1
  406. package/utilities/policies/pagination.d.ts +1 -1
  407. package/utilities/policies/pagination.js.map +1 -1
  408. package/utilities/subscriptions/relay/index.js +1 -0
  409. package/utilities/subscriptions/relay/index.js.map +1 -1
  410. package/version.js +1 -1
  411. package/version.js.map +1 -1
  412. package/__cjs/utilities/internal/types/NoInfer.cjs.map +0 -1
  413. package/__cjs/utilities/internal/types/NoInfer.d.cts +0 -35
  414. package/utilities/internal/types/NoInfer.d.ts +0 -35
  415. package/utilities/internal/types/NoInfer.js +0 -2
  416. package/utilities/internal/types/NoInfer.js.map +0 -1
@@ -2,6 +2,7 @@ import { c as _c } from "@apollo/client/react/internal/compiler-runtime";
2
2
  import { equal } from "@wry/equality";
3
3
  import * as React from "react";
4
4
  import { invariant } from "@apollo/client/utilities/invariant";
5
+ import { skipToken } from "./constants.js";
5
6
  import { useDeepMemo } from "./internal/useDeepMemo.js";
6
7
  import { useIsomorphicLayoutEffect } from "./internal/useIsomorphicLayoutEffect.js";
7
8
  import { useApolloClient } from "./useApolloClient.js";
@@ -87,7 +88,7 @@ import { useSyncExternalStore } from "./useSyncExternalStore.js";
87
88
  * @returns Query result object
88
89
  */
89
90
  export function useSubscription(subscription, ...t0) {
90
- const $ = _c(36);
91
+ const $ = _c(38);
91
92
  const [t1] = t0;
92
93
  let t2;
93
94
 
@@ -99,7 +100,20 @@ export function useSubscription(subscription, ...t0) {
99
100
  t2 = $[1];
100
101
  }
101
102
 
102
- const options = t2;
103
+ const _options = t2;
104
+ let t3;
105
+
106
+ if ($[2] !== _options) {
107
+ t3 = _options === skipToken ? {
108
+ skip: true
109
+ } : _options;
110
+ $[2] = _options;
111
+ $[3] = t3;
112
+ } else {
113
+ t3 = $[3];
114
+ }
115
+
116
+ const options = t3;
103
117
  const client = useApolloClient(options.client);
104
118
  const {
105
119
  skip,
@@ -110,24 +124,24 @@ export function useSubscription(subscription, ...t0) {
110
124
  extensions,
111
125
  ignoreResults
112
126
  } = options;
113
- let t3;
114
127
  let t4;
128
+ let t5;
115
129
 
116
- if ($[2] !== options.variables) {
117
- t3 = () => options.variables;t4 = [options.variables];
118
- $[2] = options.variables;
119
- $[3] = t3;
120
- $[4] = t4;
130
+ if ($[4] !== options.variables) {
131
+ t4 = () => options.variables;t5 = [options.variables];
132
+ $[4] = options.variables;
133
+ $[5] = t4;
134
+ $[6] = t5;
121
135
  } else {
122
- t3 = $[3];
123
- t4 = $[4];
136
+ t4 = $[5];
137
+ t5 = $[6];
124
138
  }
125
139
 
126
- const variables = useDeepMemo(t3, t4);
127
- let t5;
140
+ const variables = useDeepMemo(t4, t5);
141
+ let t6;
128
142
 
129
- if ($[5] !== client || $[6] !== context || $[7] !== errorPolicy || $[8] !== extensions || $[9] !== fetchPolicy || $[10] !== subscription || $[11] !== variables) {
130
- t5 = () => createSubscription(
143
+ if ($[7] !== client || $[8] !== context || $[9] !== errorPolicy || $[10] !== extensions || $[11] !== fetchPolicy || $[12] !== subscription || $[13] !== variables) {
144
+ t6 = () => createSubscription(
131
145
  client,
132
146
  subscription,
133
147
  variables,
@@ -136,35 +150,35 @@ export function useSubscription(subscription, ...t0) {
136
150
  context,
137
151
  extensions
138
152
  );
139
- $[5] = client;
140
- $[6] = context;
141
- $[7] = errorPolicy;
142
- $[8] = extensions;
143
- $[9] = fetchPolicy;
144
- $[10] = subscription;
145
- $[11] = variables;
146
- $[12] = t5;
153
+ $[7] = client;
154
+ $[8] = context;
155
+ $[9] = errorPolicy;
156
+ $[10] = extensions;
157
+ $[11] = fetchPolicy;
158
+ $[12] = subscription;
159
+ $[13] = variables;
160
+ $[14] = t6;
147
161
  } else {
148
- t5 = $[12];
162
+ t6 = $[14];
149
163
  }
150
164
 
151
- const recreate = t5;
152
- const [t6, setObservable] = React.useState(options.skip ? null : recreate);
153
- let observable = t6;
165
+ const recreate = t6;
166
+ const [t7, setObservable] = React.useState(skip ? null : recreate);
167
+ let observable = t7;
154
168
  const recreateRef = React.useRef(recreate);
155
- let t7;
169
+ let t8;
156
170
 
157
- if ($[13] !== recreate) {
158
- t7 = () => {
171
+ if ($[15] !== recreate) {
172
+ t8 = () => {
159
173
  recreateRef.current = recreate;
160
174
  };
161
- $[13] = recreate;
162
- $[14] = t7;
175
+ $[15] = recreate;
176
+ $[16] = t8;
163
177
  } else {
164
- t7 = $[14];
178
+ t8 = $[16];
165
179
  }
166
180
 
167
- useIsomorphicLayoutEffect(t7);
181
+ useIsomorphicLayoutEffect(t8);
168
182
  if (skip) {
169
183
  if (observable) {
170
184
  setObservable(observable = null);
@@ -175,53 +189,53 @@ export function useSubscription(subscription, ...t0) {
175
189
  }
176
190
  }
177
191
  const optionsRef = React.useRef(options);
178
- let t8;
192
+ let t9;
179
193
 
180
- if ($[15] !== options) {
181
- t8 = () => {
194
+ if ($[17] !== options) {
195
+ t9 = () => {
182
196
  optionsRef.current = options;
183
197
  };
184
- $[15] = options;
185
- $[16] = t8;
198
+ $[17] = options;
199
+ $[18] = t9;
186
200
  } else {
187
- t8 = $[16];
201
+ t9 = $[18];
188
202
  }
189
203
 
190
- React.useEffect(t8);
204
+ React.useEffect(t9);
191
205
  const fallbackLoading = !skip && !ignoreResults;
192
- let t9;
206
+ let t10;
193
207
 
194
- if ($[17] !== fallbackLoading) {
195
- t9 = {
208
+ if ($[19] !== fallbackLoading) {
209
+ t10 = {
196
210
  loading: fallbackLoading,
197
211
  error: void 0,
198
212
  data: void 0
199
213
  };
200
- $[17] = fallbackLoading;
201
- $[18] = t9;
214
+ $[19] = fallbackLoading;
215
+ $[20] = t10;
202
216
  } else {
203
- t9 = $[18];
217
+ t10 = $[20];
204
218
  }
205
219
 
206
- const fallbackResult = t9;
220
+ const fallbackResult = t10;
207
221
  const ignoreResultsRef = React.useRef(ignoreResults);
208
- let t10;
222
+ let t11;
209
223
 
210
- if ($[19] !== ignoreResults) {
211
- t10 = () => {
224
+ if ($[21] !== ignoreResults) {
225
+ t11 = () => {
212
226
  ignoreResultsRef.current = ignoreResults;
213
227
  };
214
- $[19] = ignoreResults;
215
- $[20] = t10;
228
+ $[21] = ignoreResults;
229
+ $[22] = t11;
216
230
  } else {
217
- t10 = $[20];
231
+ t11 = $[22];
218
232
  }
219
233
 
220
- useIsomorphicLayoutEffect(t10);
221
- let t11;
234
+ useIsomorphicLayoutEffect(t11);
235
+ let t12;
222
236
 
223
- if ($[21] !== observable) {
224
- t11 = update => {
237
+ if ($[23] !== observable) {
238
+ t12 = update => {
225
239
  if (!observable) {
226
240
  return _temp;
227
241
  }
@@ -266,72 +280,72 @@ export function useSubscription(subscription, ...t0) {
266
280
  setTimeout(() => subscription_0.unsubscribe());
267
281
  };
268
282
  };
269
- $[21] = observable;
270
- $[22] = t11;
283
+ $[23] = observable;
284
+ $[24] = t12;
271
285
  } else {
272
- t11 = $[22];
286
+ t12 = $[24];
273
287
  }
274
288
 
275
289
  observable;
276
- let t12;
277
-
278
- if ($[23] !== fallbackResult || $[24] !== ignoreResults || $[25] !== observable || $[26] !== skip) {
279
- t12 = () => observable && !skip && !ignoreResults ? observable.__.result : fallbackResult;
280
- $[23] = fallbackResult;
281
- $[24] = ignoreResults;
282
- $[25] = observable;
283
- $[26] = skip;
284
- $[27] = t12;
285
- } else {
286
- t12 = $[27];
287
- }
288
-
289
290
  let t13;
290
291
 
291
- if ($[28] !== fallbackResult) {
292
- t13 = () => fallbackResult;
293
- $[28] = fallbackResult;
292
+ if ($[25] !== fallbackResult || $[26] !== ignoreResults || $[27] !== observable || $[28] !== skip) {
293
+ t13 = () => observable && !skip && !ignoreResults ? observable.__.result : fallbackResult;
294
+ $[25] = fallbackResult;
295
+ $[26] = ignoreResults;
296
+ $[27] = observable;
297
+ $[28] = skip;
294
298
  $[29] = t13;
295
299
  } else {
296
300
  t13 = $[29];
297
301
  }
298
302
 
299
- const ret = useSyncExternalStore(t11, t12, t13);
300
303
  let t14;
301
304
 
302
- if ($[30] !== observable || $[31] !== setObservable) {
303
- t14 = () => {
304
- invariant(!optionsRef.current.skip, 33);
305
+ if ($[30] !== fallbackResult) {
306
+ t14 = () => fallbackResult;
307
+ $[30] = fallbackResult;
308
+ $[31] = t14;
309
+ } else {
310
+ t14 = $[31];
311
+ }
312
+
313
+ const ret = useSyncExternalStore(t12, t13, t14);
314
+ let t15;
315
+
316
+ if ($[32] !== observable || $[33] !== setObservable) {
317
+ t15 = () => {
318
+ invariant(!optionsRef.current.skip, 34);
305
319
  if (observable?.__.completed) {
306
320
  setObservable(recreateRef.current());
307
321
  } else {
308
322
  observable?.restart();
309
323
  }
310
324
  };
311
- $[30] = observable;
312
- $[31] = setObservable;
313
- $[32] = t14;
325
+ $[32] = observable;
326
+ $[33] = setObservable;
327
+ $[34] = t15;
314
328
  } else {
315
- t14 = $[32];
329
+ t15 = $[34];
316
330
  }
317
331
 
318
332
  observable;
319
- const restart = t14;
320
- let t15;
333
+ const restart = t15;
334
+ let t16;
321
335
 
322
- if ($[33] !== restart || $[34] !== ret) {
323
- t15 = {
336
+ if ($[35] !== restart || $[36] !== ret) {
337
+ t16 = {
324
338
  ...ret,
325
339
  restart
326
340
  };
327
- $[33] = restart;
328
- $[34] = ret;
329
- $[35] = t15;
341
+ $[35] = restart;
342
+ $[36] = ret;
343
+ $[37] = t16;
330
344
  } else {
331
- t15 = $[35];
345
+ t16 = $[37];
332
346
  }
333
347
 
334
- return t15;
348
+ return t16;
335
349
  }
336
350
  function _temp() {}
337
351
  function createSubscription(client, query, variables, fetchPolicy, errorPolicy, context, extensions) {
@@ -1 +1 @@
1
- {"version":3,"file":"useSubscription.js","sources":["../../../src/react/hooks/useSubscription.ts"],"sourcesContent":["import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport { equal } from \"@wry/equality\";\nimport type { DocumentNode } from \"graphql\";\nimport * as React from \"react\";\n\nimport type {\n ApolloClient,\n DefaultContext,\n ErrorLike,\n ErrorPolicy,\n FetchPolicy,\n OperationVariables,\n} from \"@apollo/client\";\nimport type { MaybeMasked } from \"@apollo/client/masking\";\nimport type { DocumentationTypes as UtilityDocumentationTypes } from \"@apollo/client/utilities/internal\";\nimport type {\n NoInfer,\n VariablesOption,\n} from \"@apollo/client/utilities/internal\";\nimport { invariant } from \"@apollo/client/utilities/invariant\";\n\nimport { useDeepMemo } from \"./internal/useDeepMemo.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\n\nexport declare namespace useSubscription {\n import _self = useSubscription;\n export namespace Base {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > {\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#shouldResubscribe:member} */\n shouldResubscribe?:\n | boolean\n | ((options: Options<TData, TVariables>) => boolean);\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#client:member} */\n client?: ApolloClient;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#skip:member} */\n skip?: boolean;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#extensions:member} */\n extensions?: Record<string, any>;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onComplete:member} */\n onComplete?: () => void;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onData:member} */\n onData?: (options: OnDataOptions<TData>) => any;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onError:member} */\n onError?: (error: ErrorLike) => void;\n\n /**\n * {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#ignoreResults:member}\n * @defaultValue `false`\n */\n ignoreResults?: boolean;\n }\n }\n\n export type Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > = Base.Options<TData, TVariables> & VariablesOption<TVariables>;\n\n export namespace DocumentationTypes {\n namespace useSubscription {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends Base.Options<TData, TVariables>,\n UtilityDocumentationTypes.VariableOptions<TVariables> {}\n }\n }\n\n export interface Result<TData = unknown> {\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#loading:member} */\n loading: boolean;\n\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#data:member} */\n data?: MaybeMasked<TData>;\n\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#error:member} */\n error?: ErrorLike;\n\n /**\n * A function that when called will disconnect and reconnect the connection\n * to the subscription. If the subscription is deduplicated, this will\n * restart the connection for all deduplicated subscriptions.\n */\n restart: () => void;\n }\n\n export namespace DocumentationTypes {\n namespace useSubscription {\n export interface Result<TData = unknown> extends _self.Result<TData> {}\n }\n }\n\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useSubscription:function(1)} */\n export function useSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n >(\n options?: useSubscription.Options<TData, TVariables>\n ): useSubscription.Result<TData>;\n }\n\n export type OnDataResult<TData = unknown> = Omit<Result<TData>, \"restart\">;\n\n export interface OnDataOptions<TData = unknown> {\n client: ApolloClient;\n data: OnDataResult<TData>;\n }\n\n export interface OnSubscriptionDataOptions<TData = unknown> {\n client: ApolloClient;\n subscriptionData: OnDataResult<TData>;\n }\n}\n\n/**\n * > Refer to the [Subscriptions](https://www.apollographql.com/docs/react/data/subscriptions/) section for a more in-depth overview of `useSubscription`.\n *\n * @example\n *\n * ```jsx\n * const COMMENTS_SUBSCRIPTION = gql`\n * subscription OnCommentAdded($repoFullName: String!) {\n * commentAdded(repoFullName: $repoFullName) {\n * id\n * content\n * }\n * }\n * `;\n *\n * function DontReadTheComments({ repoFullName }) {\n * const {\n * data: { commentAdded },\n * loading,\n * } = useSubscription(COMMENTS_SUBSCRIPTION, { variables: { repoFullName } });\n * return <h4>New comment: {!loading && commentAdded.content}</h4>;\n * }\n * ```\n *\n * @remarks\n *\n * #### Consider using `onData` instead of `useEffect`\n *\n * If you want to react to incoming data, please use the `onData` option instead of `useEffect`.\n * State updates you make inside a `useEffect` hook might cause additional rerenders, and `useEffect` is mostly meant for side effects of rendering, not as an event handler.\n * State updates made in an event handler like `onData` might - depending on the React version - be batched and cause only a single rerender.\n *\n * Consider the following component:\n *\n * ```jsx\n * export function Subscriptions() {\n * const { data, error, loading } = useSubscription(query);\n * const [accumulatedData, setAccumulatedData] = useState([]);\n *\n * useEffect(() => {\n * setAccumulatedData((prev) => [...prev, data]);\n * }, [data]);\n *\n * return (\n * <>\n * {loading && <p>Loading...</p>}\n * {JSON.stringify(accumulatedData, undefined, 2)}\n * </>\n * );\n * }\n * ```\n *\n * Instead of using `useEffect` here, we can re-write this component to use the `onData` callback function accepted in `useSubscription`'s `options` object:\n *\n * ```jsx\n * export function Subscriptions() {\n * const [accumulatedData, setAccumulatedData] = useState([]);\n * const { data, error, loading } = useSubscription(query, {\n * onData({ data }) {\n * setAccumulatedData((prev) => [...prev, data.data]);\n * },\n * });\n *\n * return (\n * <>\n * {loading && <p>Loading...</p>}\n * {JSON.stringify(accumulatedData, undefined, 2)}\n * </>\n * );\n * }\n * ```\n *\n * > ⚠️ **Note:** The `useSubscription` option `onData` is available in Apollo Client >= 3.7. In previous versions, the equivalent option is named `onSubscriptionData`.\n *\n * Now, the first message will be added to the `accumulatedData` array since `onData` is called _before_ the component re-renders. React 18 automatic batching is still in effect and results in a single re-render, but with `onData` we can guarantee each message received after the component mounts is added to `accumulatedData`.\n *\n * @param subscription - A GraphQL subscription document parsed into an AST by `gql`.\n * @param options - Options to control how the subscription is executed.\n * @returns Query result object\n */\nexport function useSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n subscription: DocumentNode | TypedDocumentNode<TData, TVariables>,\n ...[options = {} as useSubscription.Options<TData, TVariables>]: {} extends (\n TVariables\n ) ?\n [options?: useSubscription.Options<NoInfer<TData>, NoInfer<TVariables>>]\n : [options: useSubscription.Options<NoInfer<TData>, NoInfer<TVariables>>]\n): useSubscription.Result<TData> {\n const client = useApolloClient(options.client);\n\n const {\n skip,\n fetchPolicy,\n errorPolicy,\n shouldResubscribe,\n context,\n extensions,\n ignoreResults,\n } = options;\n const variables = useDeepMemo(() => options.variables, [options.variables]);\n\n const recreate = () =>\n createSubscription(\n client,\n subscription,\n variables,\n fetchPolicy,\n errorPolicy,\n context,\n extensions\n );\n\n let [observable, setObservable] = React.useState(\n options.skip ? null : recreate\n );\n\n const recreateRef = React.useRef(recreate);\n useIsomorphicLayoutEffect(() => {\n recreateRef.current = recreate;\n });\n\n if (skip) {\n if (observable) {\n setObservable((observable = null));\n }\n } else if (\n !observable ||\n ((client !== observable.__.client ||\n subscription !== observable.__.query ||\n fetchPolicy !== observable.__.fetchPolicy ||\n errorPolicy !== observable.__.errorPolicy ||\n !equal(variables, observable.__.variables)) &&\n (typeof shouldResubscribe === \"function\" ?\n !!shouldResubscribe(options!)\n : shouldResubscribe) !== false)\n ) {\n setObservable((observable = recreate()));\n }\n\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n });\n\n const fallbackLoading = !skip && !ignoreResults;\n const fallbackResult = React.useMemo(\n () => ({\n loading: fallbackLoading,\n error: void 0,\n data: void 0,\n }),\n [fallbackLoading]\n );\n\n const ignoreResultsRef = React.useRef(ignoreResults);\n useIsomorphicLayoutEffect(() => {\n // We cannot reference `ignoreResults` directly in the effect below\n // it would add a dependency to the `useEffect` deps array, which means the\n // subscription would be recreated if `ignoreResults` changes\n // As a result, on resubscription, the last result would be re-delivered,\n // rendering the component one additional time, and re-triggering `onData`.\n // The same applies to `fetchPolicy`, which results in a new `observable`\n // being created. We cannot really avoid it in that case, but we can at least\n // avoid it for `ignoreResults`.\n ignoreResultsRef.current = ignoreResults;\n });\n\n const ret = useSyncExternalStore(\n React.useCallback(\n (update) => {\n if (!observable) {\n return () => {};\n }\n\n let subscriptionStopped = false;\n const client = observable.__.client;\n const subscription = observable.subscribe({\n next(value) {\n if (subscriptionStopped) {\n return;\n }\n\n const result = {\n loading: false,\n data: value.data,\n error: value.error,\n };\n\n observable.__.setResult(result);\n if (!ignoreResultsRef.current) update();\n\n if (result.error) {\n optionsRef.current.onError?.(result.error);\n } else if (optionsRef.current.onData) {\n optionsRef.current.onData({\n client,\n data: result,\n });\n }\n },\n complete() {\n observable.__.completed = true;\n if (!subscriptionStopped && optionsRef.current.onComplete) {\n optionsRef.current.onComplete();\n }\n },\n });\n\n return () => {\n // immediately stop receiving subscription values, but do not unsubscribe\n // until after a short delay in case another useSubscription hook is\n // reusing the same underlying observable and is about to subscribe\n subscriptionStopped = true;\n\n setTimeout(() => subscription.unsubscribe());\n };\n },\n [observable]\n ),\n () =>\n observable && !skip && !ignoreResults ?\n observable.__.result\n : fallbackResult,\n () => fallbackResult\n );\n\n const restart = React.useCallback(() => {\n invariant(\n !optionsRef.current.skip,\n \"A subscription that is skipped cannot be restarted.\"\n );\n if (observable?.__.completed) {\n setObservable(recreateRef.current());\n } else {\n observable?.restart();\n }\n }, [observable, setObservable, optionsRef, recreateRef]);\n\n return React.useMemo(() => ({ ...ret, restart }), [ret, restart]);\n}\n\ntype SubscriptionResult<TData> = Omit<useSubscription.Result<TData>, \"restart\">;\n\nfunction createSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n client: ApolloClient,\n query: TypedDocumentNode<TData, TVariables>,\n variables: TVariables | undefined,\n fetchPolicy: FetchPolicy | undefined,\n errorPolicy: ErrorPolicy | undefined,\n context: DefaultContext | undefined,\n extensions: Record<string, any> | undefined\n) {\n const options = {\n query,\n variables,\n fetchPolicy,\n errorPolicy,\n context,\n extensions,\n } as ApolloClient.SubscribeOptions<TData, TVariables>;\n const __ = {\n ...options,\n client,\n completed: false,\n result: {\n loading: true,\n data: void 0,\n error: void 0,\n } as SubscriptionResult<TData>,\n setResult(result: SubscriptionResult<TData>) {\n __.result = result;\n },\n };\n\n return Object.assign(client.subscribe(options), {\n /**\n * A tracking object to store details about the observable and the latest result of the subscription.\n */\n __,\n });\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSubscription.js","sources":["../../../src/react/hooks/useSubscription.ts"],"sourcesContent":["import type { TypedDocumentNode } from \"@graphql-typed-document-node/core\";\nimport { equal } from \"@wry/equality\";\nimport type { DocumentNode } from \"graphql\";\nimport * as React from \"react\";\n\nimport type {\n ApolloClient,\n DefaultContext,\n ErrorLike,\n ErrorPolicy,\n FetchPolicy,\n OperationVariables,\n} from \"@apollo/client\";\nimport type { MaybeMasked } from \"@apollo/client/masking\";\nimport type { DocumentationTypes as UtilityDocumentationTypes } from \"@apollo/client/utilities/internal\";\nimport type { VariablesOption } from \"@apollo/client/utilities/internal\";\nimport { invariant } from \"@apollo/client/utilities/invariant\";\n\nimport type { SkipToken } from \"./constants.js\";\nimport { skipToken } from \"./constants.js\";\nimport { useDeepMemo } from \"./internal/useDeepMemo.js\";\nimport { useIsomorphicLayoutEffect } from \"./internal/useIsomorphicLayoutEffect.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\nimport { useSyncExternalStore } from \"./useSyncExternalStore.js\";\n\nexport declare namespace useSubscription {\n import _self = useSubscription;\n export namespace Base {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > {\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#fetchPolicy:member} */\n fetchPolicy?: FetchPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#errorPolicy:member} */\n errorPolicy?: ErrorPolicy;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#shouldResubscribe:member} */\n shouldResubscribe?:\n | boolean\n | ((options: Options<TData, TVariables>) => boolean);\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#client:member} */\n client?: ApolloClient;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#skip:member} */\n skip?: boolean;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#context:member} */\n context?: DefaultContext;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#extensions:member} */\n extensions?: Record<string, any>;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onComplete:member} */\n onComplete?: () => void;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onData:member} */\n onData?: (options: OnDataOptions<TData>) => any;\n\n /** {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#onError:member} */\n onError?: (error: ErrorLike) => void;\n\n /**\n * {@inheritDoc @apollo/client!SubscriptionOptionsDocumentation#ignoreResults:member}\n * @defaultValue `false`\n */\n ignoreResults?: boolean;\n }\n }\n\n export type Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > = Base.Options<TData, TVariables> & VariablesOption<TVariables>;\n\n export namespace DocumentationTypes {\n namespace useSubscription {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends Base.Options<TData, TVariables>,\n UtilityDocumentationTypes.VariableOptions<TVariables> {}\n }\n }\n\n export interface Result<TData = unknown> {\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#loading:member} */\n loading: boolean;\n\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#data:member} */\n data?: MaybeMasked<TData>;\n\n /** {@inheritDoc @apollo/client!SubscriptionResultDocumentation#error:member} */\n error?: ErrorLike;\n\n /**\n * A function that when called will disconnect and reconnect the connection\n * to the subscription. If the subscription is deduplicated, this will\n * restart the connection for all deduplicated subscriptions.\n */\n restart: () => void;\n }\n\n export namespace DocumentationTypes {\n namespace useSubscription {\n export interface Result<TData = unknown> extends _self.Result<TData> {}\n }\n }\n\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useSubscription:function(1)} */\n export function useSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n >(\n options?: useSubscription.Options<TData, TVariables>\n ): useSubscription.Result<TData>;\n }\n\n export type OnDataResult<TData = unknown> = Omit<Result<TData>, \"restart\">;\n\n export interface OnDataOptions<TData = unknown> {\n client: ApolloClient;\n data: OnDataResult<TData>;\n }\n\n export interface OnSubscriptionDataOptions<TData = unknown> {\n client: ApolloClient;\n subscriptionData: OnDataResult<TData>;\n }\n}\n\n/**\n * > Refer to the [Subscriptions](https://www.apollographql.com/docs/react/data/subscriptions/) section for a more in-depth overview of `useSubscription`.\n *\n * @example\n *\n * ```jsx\n * const COMMENTS_SUBSCRIPTION = gql`\n * subscription OnCommentAdded($repoFullName: String!) {\n * commentAdded(repoFullName: $repoFullName) {\n * id\n * content\n * }\n * }\n * `;\n *\n * function DontReadTheComments({ repoFullName }) {\n * const {\n * data: { commentAdded },\n * loading,\n * } = useSubscription(COMMENTS_SUBSCRIPTION, { variables: { repoFullName } });\n * return <h4>New comment: {!loading && commentAdded.content}</h4>;\n * }\n * ```\n *\n * @remarks\n *\n * #### Consider using `onData` instead of `useEffect`\n *\n * If you want to react to incoming data, please use the `onData` option instead of `useEffect`.\n * State updates you make inside a `useEffect` hook might cause additional rerenders, and `useEffect` is mostly meant for side effects of rendering, not as an event handler.\n * State updates made in an event handler like `onData` might - depending on the React version - be batched and cause only a single rerender.\n *\n * Consider the following component:\n *\n * ```jsx\n * export function Subscriptions() {\n * const { data, error, loading } = useSubscription(query);\n * const [accumulatedData, setAccumulatedData] = useState([]);\n *\n * useEffect(() => {\n * setAccumulatedData((prev) => [...prev, data]);\n * }, [data]);\n *\n * return (\n * <>\n * {loading && <p>Loading...</p>}\n * {JSON.stringify(accumulatedData, undefined, 2)}\n * </>\n * );\n * }\n * ```\n *\n * Instead of using `useEffect` here, we can re-write this component to use the `onData` callback function accepted in `useSubscription`'s `options` object:\n *\n * ```jsx\n * export function Subscriptions() {\n * const [accumulatedData, setAccumulatedData] = useState([]);\n * const { data, error, loading } = useSubscription(query, {\n * onData({ data }) {\n * setAccumulatedData((prev) => [...prev, data.data]);\n * },\n * });\n *\n * return (\n * <>\n * {loading && <p>Loading...</p>}\n * {JSON.stringify(accumulatedData, undefined, 2)}\n * </>\n * );\n * }\n * ```\n *\n * > ⚠️ **Note:** The `useSubscription` option `onData` is available in Apollo Client >= 3.7. In previous versions, the equivalent option is named `onSubscriptionData`.\n *\n * Now, the first message will be added to the `accumulatedData` array since `onData` is called _before_ the component re-renders. React 18 automatic batching is still in effect and results in a single re-render, but with `onData` we can guarantee each message received after the component mounts is added to `accumulatedData`.\n *\n * @param subscription - A GraphQL subscription document parsed into an AST by `gql`.\n * @param options - Options to control how the subscription is executed.\n * @returns Query result object\n */\nexport function useSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n subscription: DocumentNode | TypedDocumentNode<TData, TVariables>,\n ...[_options = {} as useSubscription.Options<TData, TVariables>]: {} extends (\n TVariables\n ) ?\n [\n options?:\n | SkipToken\n | useSubscription.Options<NoInfer<TData>, NoInfer<TVariables>>,\n ]\n : [\n options:\n | SkipToken\n | useSubscription.Options<NoInfer<TData>, NoInfer<TVariables>>,\n ]\n): useSubscription.Result<TData> {\n const options =\n _options === skipToken ?\n ({ skip: true } as useSubscription.Options<TData, TVariables>)\n : _options;\n\n const client = useApolloClient(options.client);\n\n const {\n skip,\n fetchPolicy,\n errorPolicy,\n shouldResubscribe,\n context,\n extensions,\n ignoreResults,\n } = options;\n const variables = useDeepMemo(() => options.variables, [options.variables]);\n\n const recreate = () =>\n createSubscription(\n client,\n subscription,\n variables,\n fetchPolicy,\n errorPolicy,\n context,\n extensions\n );\n\n let [observable, setObservable] = React.useState(skip ? null : recreate);\n\n const recreateRef = React.useRef(recreate);\n useIsomorphicLayoutEffect(() => {\n recreateRef.current = recreate;\n });\n\n if (skip) {\n if (observable) {\n setObservable((observable = null));\n }\n } else if (\n !observable ||\n ((client !== observable.__.client ||\n subscription !== observable.__.query ||\n fetchPolicy !== observable.__.fetchPolicy ||\n errorPolicy !== observable.__.errorPolicy ||\n !equal(variables, observable.__.variables)) &&\n (typeof shouldResubscribe === \"function\" ?\n !!shouldResubscribe(options)\n : shouldResubscribe) !== false)\n ) {\n setObservable((observable = recreate()));\n }\n\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n });\n\n const fallbackLoading = !skip && !ignoreResults;\n const fallbackResult = React.useMemo(\n () => ({\n loading: fallbackLoading,\n error: void 0,\n data: void 0,\n }),\n [fallbackLoading]\n );\n\n const ignoreResultsRef = React.useRef(ignoreResults);\n useIsomorphicLayoutEffect(() => {\n // We cannot reference `ignoreResults` directly in the effect below\n // it would add a dependency to the `useEffect` deps array, which means the\n // subscription would be recreated if `ignoreResults` changes\n // As a result, on resubscription, the last result would be re-delivered,\n // rendering the component one additional time, and re-triggering `onData`.\n // The same applies to `fetchPolicy`, which results in a new `observable`\n // being created. We cannot really avoid it in that case, but we can at least\n // avoid it for `ignoreResults`.\n ignoreResultsRef.current = ignoreResults;\n });\n\n const ret = useSyncExternalStore(\n React.useCallback(\n (update) => {\n if (!observable) {\n return () => {};\n }\n\n let subscriptionStopped = false;\n const client = observable.__.client;\n const subscription = observable.subscribe({\n next(value) {\n if (subscriptionStopped) {\n return;\n }\n\n const result = {\n loading: false,\n data: value.data,\n error: value.error,\n };\n\n observable.__.setResult(result);\n if (!ignoreResultsRef.current) update();\n\n if (result.error) {\n optionsRef.current.onError?.(result.error);\n } else if (optionsRef.current.onData) {\n optionsRef.current.onData({\n client,\n data: result,\n });\n }\n },\n complete() {\n observable.__.completed = true;\n if (!subscriptionStopped && optionsRef.current.onComplete) {\n optionsRef.current.onComplete();\n }\n },\n });\n\n return () => {\n // immediately stop receiving subscription values, but do not unsubscribe\n // until after a short delay in case another useSubscription hook is\n // reusing the same underlying observable and is about to subscribe\n subscriptionStopped = true;\n\n setTimeout(() => subscription.unsubscribe());\n };\n },\n [observable]\n ),\n () =>\n observable && !skip && !ignoreResults ?\n observable.__.result\n : fallbackResult,\n () => fallbackResult\n );\n\n const restart = React.useCallback(() => {\n invariant(\n !optionsRef.current.skip,\n \"A subscription that is skipped cannot be restarted.\"\n );\n if (observable?.__.completed) {\n setObservable(recreateRef.current());\n } else {\n observable?.restart();\n }\n }, [observable, setObservable, optionsRef, recreateRef]);\n\n return React.useMemo(() => ({ ...ret, restart }), [ret, restart]);\n}\n\ntype SubscriptionResult<TData> = Omit<useSubscription.Result<TData>, \"restart\">;\n\nfunction createSubscription<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n client: ApolloClient,\n query: TypedDocumentNode<TData, TVariables>,\n variables: TVariables | undefined,\n fetchPolicy: FetchPolicy | undefined,\n errorPolicy: ErrorPolicy | undefined,\n context: DefaultContext | undefined,\n extensions: Record<string, any> | undefined\n) {\n const options = {\n query,\n variables,\n fetchPolicy,\n errorPolicy,\n context,\n extensions,\n } as ApolloClient.SubscribeOptions<TData, TVariables>;\n const __ = {\n ...options,\n client,\n completed: false,\n result: {\n loading: true,\n data: void 0,\n error: void 0,\n } as SubscriptionResult<TData>,\n setResult(result: SubscriptionResult<TData>) {\n __.result = result;\n },\n };\n\n return Object.assign(client.subscribe(options), {\n /**\n * A tracking object to store details about the observable and the latest result of the subscription.\n */\n __,\n });\n}\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import type { ApolloClient, DataValue, DocumentNode, OperationVariables, TypedDocumentNode } from "@apollo/client";
2
2
  import type { ApolloCache } from "@apollo/client/cache";
3
3
  import type { MaybeMasked } from "@apollo/client/masking";
4
- import type { DocumentationTypes as UtilityDocumentationTypes, NoInfer, VariablesOption } from "@apollo/client/utilities/internal";
4
+ import type { DocumentationTypes as UtilityDocumentationTypes, VariablesOption } from "@apollo/client/utilities/internal";
5
5
  export declare namespace useSuspenseFragment {
6
6
  import _self = useSuspenseFragment;
7
7
  namespace Base {
@@ -1 +1 @@
1
- {"version":3,"file":"useSuspenseFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseFragment.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\n\nimport type {\n ApolloClient,\n DataValue,\n DocumentNode,\n OperationVariables,\n TypedDocumentNode,\n} from \"@apollo/client\";\nimport type { ApolloCache } from \"@apollo/client/cache\";\nimport { canonicalStringify } from \"@apollo/client/cache\";\nimport type { MaybeMasked } from \"@apollo/client/masking\";\nimport type { FragmentKey } from \"@apollo/client/react/internal\";\nimport { getSuspenseCache } from \"@apollo/client/react/internal\";\nimport type {\n DocumentationTypes as UtilityDocumentationTypes,\n NoInfer,\n VariablesOption,\n} from \"@apollo/client/utilities/internal\";\n\nimport { __use } from \"./internal/__use.js\";\nimport { useDeepMemo, wrapHook } from \"./internal/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\n\nexport declare namespace useSuspenseFragment {\n import _self = useSuspenseFragment;\n export namespace Base {\n export type 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 * 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:\n | useSuspenseFragment.FromOptionValue<TData>\n | Array<useSuspenseFragment.FromOptionValue<TData> | null>\n | null;\n\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\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 export type Options<\n TData,\n TVariables extends OperationVariables,\n > = Base.Options<TData, TVariables> & VariablesOption<NoInfer<TVariables>>;\n\n export namespace DocumentationTypes {\n export namespace useSuspenseFragment {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends Base.Options<TData, TVariables>,\n UtilityDocumentationTypes.VariableOptions<TVariables> {}\n }\n }\n\n /**\n * Acceptable values provided to the `from` option.\n */\n export type FromOptionValue<TData> = ApolloCache.FromOptionValue<TData>;\n\n export interface Result<TData> {\n data: DataValue.Complete<MaybeMasked<TData>>;\n }\n export namespace DocumentationTypes {\n export namespace useSuspenseFragment {\n export interface Result<TData = unknown> extends _self.Result<TData> {}\n }\n }\n\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\n export function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n >(\n options: useSuspenseFragment.Options<TData, TVariables>\n ): useSuspenseFragment.Result<TData>;\n }\n}\n\n/** #TODO documentation */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<useSuspenseFragment.FromOptionValue<TData>>;\n }\n): useSuspenseFragment.Result<Array<TData>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<null>;\n }\n): useSuspenseFragment.Result<Array<null>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<useSuspenseFragment.FromOptionValue<TData> | null>;\n }\n): useSuspenseFragment.Result<Array<TData | null>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: useSuspenseFragment.FromOptionValue<TData>;\n }\n): useSuspenseFragment.Result<TData>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: null;\n }\n): useSuspenseFragment.Result<null>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: useSuspenseFragment.FromOptionValue<TData> | null;\n }\n): useSuspenseFragment.Result<TData | null>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData>;\n\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData | null> {\n \"use no memo\";\n return wrapHook(\n \"useSuspenseFragment\",\n useSuspenseFragment_,\n useApolloClient(typeof options === \"object\" ? options.client : undefined)\n )(options);\n}\n\nfunction useSuspenseFragment_<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData | null> {\n const client = useApolloClient(options.client);\n const { from, variables } = options;\n const { cache } = client;\n\n const ids = useDeepMemo(() => {\n return Array.isArray(from) ?\n from.map((id) => toStringId(cache, id))\n : toStringId(cache, from);\n }, [cache, from]);\n const idString = React.useMemo(\n () => (Array.isArray(ids) ? ids.join(\",\") : ids),\n [ids]\n );\n\n const fragmentRef = getSuspenseCache(client).getFragmentRef(\n [options.fragment, canonicalStringify(variables), idString],\n client,\n { ...options, variables: variables as TVariables, from: ids }\n );\n\n let [current, setPromise] = React.useState<\n [FragmentKey, Promise<MaybeMasked<TData> | null>]\n >([fragmentRef.key, fragmentRef.promise]);\n\n React.useEffect(() => {\n const dispose = fragmentRef.retain();\n const removeListener = fragmentRef.listen((promise) => {\n setPromise([fragmentRef.key, promise]);\n });\n\n return () => {\n dispose();\n removeListener();\n };\n }, [fragmentRef]);\n\n if (current[0] !== fragmentRef.key) {\n // eslint-disable-next-line react-hooks/immutability\n current[0] = fragmentRef.key;\n // eslint-disable-next-line react-hooks/immutability\n current[1] = fragmentRef.promise;\n }\n\n const data = __use(current[1]);\n\n return { data };\n}\n\nfunction toStringId(\n cache: ApolloCache,\n from: useSuspenseFragment.FromOptionValue<any> | null\n) {\n return (\n typeof from === \"string\" ? from\n : from === null ? null\n : cache.identify(from)) as string | null;\n}\n"]}
1
+ {"version":3,"file":"useSuspenseFragment.js","sourceRoot":"","sources":["../../../src/react/hooks/useSuspenseFragment.ts"],"names":[],"mappings":"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","sourcesContent":["import * as React from \"react\";\n\nimport type {\n ApolloClient,\n DataValue,\n DocumentNode,\n OperationVariables,\n TypedDocumentNode,\n} from \"@apollo/client\";\nimport type { ApolloCache } from \"@apollo/client/cache\";\nimport { canonicalStringify } from \"@apollo/client/cache\";\nimport type { MaybeMasked } from \"@apollo/client/masking\";\nimport type { FragmentKey } from \"@apollo/client/react/internal\";\nimport { getSuspenseCache } from \"@apollo/client/react/internal\";\nimport type {\n DocumentationTypes as UtilityDocumentationTypes,\n VariablesOption,\n} from \"@apollo/client/utilities/internal\";\n\nimport { __use } from \"./internal/__use.js\";\nimport { useDeepMemo, wrapHook } from \"./internal/index.js\";\nimport { useApolloClient } from \"./useApolloClient.js\";\n\nexport declare namespace useSuspenseFragment {\n import _self = useSuspenseFragment;\n export namespace Base {\n export type 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 * 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:\n | useSuspenseFragment.FromOptionValue<TData>\n | Array<useSuspenseFragment.FromOptionValue<TData> | null>\n | null;\n\n // Override this field to make it optional (default: true).\n optimistic?: boolean;\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 export type Options<\n TData,\n TVariables extends OperationVariables,\n > = Base.Options<TData, TVariables> & VariablesOption<NoInfer<TVariables>>;\n\n export namespace DocumentationTypes {\n export namespace useSuspenseFragment {\n export interface Options<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n > extends Base.Options<TData, TVariables>,\n UtilityDocumentationTypes.VariableOptions<TVariables> {}\n }\n }\n\n /**\n * Acceptable values provided to the `from` option.\n */\n export type FromOptionValue<TData> = ApolloCache.FromOptionValue<TData>;\n\n export interface Result<TData> {\n data: DataValue.Complete<MaybeMasked<TData>>;\n }\n export namespace DocumentationTypes {\n export namespace useSuspenseFragment {\n export interface Result<TData = unknown> extends _self.Result<TData> {}\n }\n }\n\n export namespace DocumentationTypes {\n /** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\n export function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n >(\n options: useSuspenseFragment.Options<TData, TVariables>\n ): useSuspenseFragment.Result<TData>;\n }\n}\n\n/** #TODO documentation */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<useSuspenseFragment.FromOptionValue<TData>>;\n }\n): useSuspenseFragment.Result<Array<TData>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<null>;\n }\n): useSuspenseFragment.Result<Array<null>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: Array<useSuspenseFragment.FromOptionValue<TData> | null>;\n }\n): useSuspenseFragment.Result<Array<TData | null>>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: useSuspenseFragment.FromOptionValue<TData>;\n }\n): useSuspenseFragment.Result<TData>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: null;\n }\n): useSuspenseFragment.Result<null>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables> & {\n from: useSuspenseFragment.FromOptionValue<TData> | null;\n }\n): useSuspenseFragment.Result<TData | null>;\n\n/** {@inheritDoc @apollo/client/react!useSuspenseFragment:function(1)} */\nexport function useSuspenseFragment<\n TData,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData>;\n\nexport function useSuspenseFragment<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData | null> {\n \"use no memo\";\n return wrapHook(\n \"useSuspenseFragment\",\n useSuspenseFragment_,\n useApolloClient(typeof options === \"object\" ? options.client : undefined)\n )(options);\n}\n\nfunction useSuspenseFragment_<\n TData = unknown,\n TVariables extends OperationVariables = OperationVariables,\n>(\n options: useSuspenseFragment.Options<TData, TVariables>\n): useSuspenseFragment.Result<TData | null> {\n const client = useApolloClient(options.client);\n const { from, variables } = options;\n const { cache } = client;\n\n const ids = useDeepMemo(() => {\n return Array.isArray(from) ?\n from.map((id) => toStringId(cache, id))\n : toStringId(cache, from);\n }, [cache, from]);\n const idString = React.useMemo(\n () => (Array.isArray(ids) ? ids.join(\",\") : ids),\n [ids]\n );\n\n const fragmentRef = getSuspenseCache(client).getFragmentRef(\n [options.fragment, canonicalStringify(variables), idString],\n client,\n { ...options, variables: variables as TVariables, from: ids }\n );\n\n let [current, setPromise] = React.useState<\n [FragmentKey, Promise<MaybeMasked<TData> | null>]\n >([fragmentRef.key, fragmentRef.promise]);\n\n React.useEffect(() => {\n const dispose = fragmentRef.retain();\n const removeListener = fragmentRef.listen((promise) => {\n setPromise([fragmentRef.key, promise]);\n });\n\n return () => {\n dispose();\n removeListener();\n };\n }, [fragmentRef]);\n\n if (current[0] !== fragmentRef.key) {\n // eslint-disable-next-line react-hooks/immutability\n current[0] = fragmentRef.key;\n // eslint-disable-next-line react-hooks/immutability\n current[1] = fragmentRef.promise;\n }\n\n const data = __use(current[1]);\n\n return { data };\n}\n\nfunction toStringId(\n cache: ApolloCache,\n from: useSuspenseFragment.FromOptionValue<any> | null\n) {\n return (\n typeof from === \"string\" ? from\n : from === null ? null\n : cache.identify(from)) as string | null;\n}\n"]}