@apollo/client 4.0.9 → 4.1.2

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 (370) hide show
  1. package/CHANGELOG.md +445 -0
  2. package/__cjs/cache/core/cache.cjs +217 -52
  3. package/__cjs/cache/core/cache.cjs.map +1 -1
  4. package/__cjs/cache/core/cache.d.cts +141 -25
  5. package/__cjs/cache/core/types/Cache.d.cts +78 -17
  6. package/__cjs/cache/index.cjs.map +1 -1
  7. package/__cjs/cache/index.d.cts +1 -1
  8. package/__cjs/cache/inmemory/entityStore.cjs +6 -4
  9. package/__cjs/cache/inmemory/entityStore.cjs.map +1 -1
  10. package/__cjs/cache/inmemory/fragmentRegistry.cjs +5 -0
  11. package/__cjs/cache/inmemory/fragmentRegistry.cjs.map +1 -1
  12. package/__cjs/cache/inmemory/helpers.d.cts +1 -1
  13. package/__cjs/cache/inmemory/inMemoryCache.cjs +62 -1
  14. package/__cjs/cache/inmemory/inMemoryCache.cjs.map +1 -1
  15. package/__cjs/cache/inmemory/inMemoryCache.d.cts +48 -0
  16. package/__cjs/cache/inmemory/key-extractor.cjs +1 -1
  17. package/__cjs/cache/inmemory/key-extractor.cjs.map +1 -1
  18. package/__cjs/cache/inmemory/policies.cjs +76 -17
  19. package/__cjs/cache/inmemory/policies.cjs.map +1 -1
  20. package/__cjs/cache/inmemory/policies.d.cts +33 -6
  21. package/__cjs/cache/inmemory/readFromStore.cjs +9 -8
  22. package/__cjs/cache/inmemory/readFromStore.cjs.map +1 -1
  23. package/__cjs/cache/inmemory/types.d.cts +3 -0
  24. package/__cjs/cache/inmemory/writeToStore.cjs +25 -10
  25. package/__cjs/cache/inmemory/writeToStore.cjs.map +1 -1
  26. package/__cjs/cache/inmemory/writeToStore.d.cts +1 -1
  27. package/__cjs/core/ApolloClient.cjs +31 -49
  28. package/__cjs/core/ApolloClient.cjs.map +1 -1
  29. package/__cjs/core/ApolloClient.d.cts +159 -18
  30. package/__cjs/core/ObservableQuery.cjs +178 -131
  31. package/__cjs/core/ObservableQuery.cjs.map +1 -1
  32. package/__cjs/core/ObservableQuery.d.cts +2 -0
  33. package/__cjs/core/QueryInfo.cjs +9 -1
  34. package/__cjs/core/QueryInfo.cjs.map +1 -1
  35. package/__cjs/core/QueryInfo.d.cts +4 -3
  36. package/__cjs/core/QueryManager.cjs +47 -25
  37. package/__cjs/core/QueryManager.cjs.map +1 -1
  38. package/__cjs/core/QueryManager.d.cts +19 -2
  39. package/__cjs/incremental/handlers/defer20220824.cjs +44 -19
  40. package/__cjs/incremental/handlers/defer20220824.cjs.map +1 -1
  41. package/__cjs/incremental/handlers/defer20220824.d.cts +15 -7
  42. package/__cjs/incremental/handlers/graphql17Alpha9.cjs +227 -0
  43. package/__cjs/incremental/handlers/graphql17Alpha9.cjs.map +1 -0
  44. package/__cjs/incremental/handlers/graphql17Alpha9.d.cts +98 -0
  45. package/__cjs/incremental/handlers/notImplemented.cjs +1 -1
  46. package/__cjs/incremental/handlers/notImplemented.cjs.map +1 -1
  47. package/__cjs/incremental/index.cjs +3 -1
  48. package/__cjs/incremental/index.cjs.map +1 -1
  49. package/__cjs/incremental/index.d.cts +1 -0
  50. package/__cjs/incremental/types.d.cts +9 -0
  51. package/__cjs/invariantErrorCodes.cjs +83 -61
  52. package/__cjs/link/client-awareness/ClientAwarenessLink.cjs +13 -1
  53. package/__cjs/link/client-awareness/ClientAwarenessLink.cjs.map +1 -1
  54. package/__cjs/link/client-awareness/ClientAwarenessLink.d.cts +1 -1
  55. package/__cjs/link/core/ApolloLink.cjs +3 -3
  56. package/__cjs/link/error/index.cjs +1 -1
  57. package/__cjs/link/error/index.cjs.map +1 -1
  58. package/__cjs/link/error/index.d.cts +1 -1
  59. package/__cjs/link/http/checkFetcher.cjs +1 -1
  60. package/__cjs/link/http/parseAndCheckHttpResponse.cjs +2 -2
  61. package/__cjs/link/http/parseAndCheckHttpResponse.cjs.map +1 -1
  62. package/__cjs/link/persisted-queries/index.cjs +2 -2
  63. package/__cjs/link/remove-typename/removeTypenameFromVariables.cjs +51 -50
  64. package/__cjs/link/remove-typename/removeTypenameFromVariables.cjs.map +1 -1
  65. package/__cjs/link/remove-typename/removeTypenameFromVariables.d.cts +3 -0
  66. package/__cjs/link/schema/index.cjs +1 -1
  67. package/__cjs/link/schema/index.cjs.map +1 -1
  68. package/__cjs/link/schema/index.d.cts +1 -1
  69. package/__cjs/link/ws/index.cjs +1 -1
  70. package/__cjs/local-state/LocalState.cjs +29 -15
  71. package/__cjs/local-state/LocalState.cjs.map +1 -1
  72. package/__cjs/local-state/LocalState.d.cts +3 -2
  73. package/__cjs/masking/types.d.cts +2 -1
  74. package/__cjs/react/hooks/internal/useDeepMemo.cjs +2 -0
  75. package/__cjs/react/hooks/internal/useDeepMemo.cjs.map +1 -1
  76. package/__cjs/react/hooks/useApolloClient.cjs +1 -1
  77. package/__cjs/react/hooks/useApolloClient.cjs.map +1 -1
  78. package/__cjs/react/hooks/useApolloClient.d.cts +1 -1
  79. package/__cjs/react/hooks/useBackgroundQuery.cjs +1 -3
  80. package/__cjs/react/hooks/useBackgroundQuery.cjs.map +1 -1
  81. package/__cjs/react/hooks/useFragment.cjs +38 -87
  82. package/__cjs/react/hooks/useFragment.cjs.map +1 -1
  83. package/__cjs/react/hooks/useFragment.d.cts +65 -6
  84. package/__cjs/react/hooks/useLazyQuery.cjs +3 -0
  85. package/__cjs/react/hooks/useLazyQuery.cjs.map +1 -1
  86. package/__cjs/react/hooks/useMutation.cjs +7 -1
  87. package/__cjs/react/hooks/useMutation.cjs.map +1 -1
  88. package/__cjs/react/hooks/useMutation.d.cts +13 -1
  89. package/__cjs/react/hooks/useQuery.cjs +8 -8
  90. package/__cjs/react/hooks/useQuery.cjs.map +1 -1
  91. package/__cjs/react/hooks/useQuery.d.cts +1 -1
  92. package/__cjs/react/hooks/useQueryRefHandlers.cjs +1 -3
  93. package/__cjs/react/hooks/useQueryRefHandlers.cjs.map +1 -1
  94. package/__cjs/react/hooks/useReadQuery.cjs +1 -3
  95. package/__cjs/react/hooks/useReadQuery.cjs.map +1 -1
  96. package/__cjs/react/hooks/useSubscription.cjs +1 -1
  97. package/__cjs/react/hooks/useSubscription.cjs.map +1 -1
  98. package/__cjs/react/hooks/useSuspenseFragment.cjs +16 -16
  99. package/__cjs/react/hooks/useSuspenseFragment.cjs.map +1 -1
  100. package/__cjs/react/hooks/useSuspenseFragment.d.cts +33 -7
  101. package/__cjs/react/hooks/useSuspenseQuery.cjs +6 -4
  102. package/__cjs/react/hooks/useSuspenseQuery.cjs.map +1 -1
  103. package/__cjs/react/internal/cache/FragmentReference.cjs +3 -22
  104. package/__cjs/react/internal/cache/FragmentReference.cjs.map +1 -1
  105. package/__cjs/react/internal/cache/FragmentReference.d.cts +2 -4
  106. package/__cjs/react/internal/cache/QueryReference.cjs +16 -0
  107. package/__cjs/react/internal/cache/QueryReference.cjs.map +1 -1
  108. package/__cjs/react/internal/cache/QueryReference.d.cts +5 -0
  109. package/__cjs/react/internal/cache/SuspenseCache.cjs.map +1 -1
  110. package/__cjs/react/internal/cache/SuspenseCache.d.cts +1 -1
  111. package/__cjs/react/internal/cache/types.d.cts +2 -2
  112. package/__cjs/react/query-preloader/createQueryPreloader.cjs +41 -1
  113. package/__cjs/react/query-preloader/createQueryPreloader.cjs.map +1 -1
  114. package/__cjs/react/ssr/prerenderStatic.cjs +17 -4
  115. package/__cjs/react/ssr/prerenderStatic.cjs.map +1 -1
  116. package/__cjs/react/ssr/prerenderStatic.d.cts +23 -4
  117. package/__cjs/react/ssr/useSSRQuery.cjs +7 -4
  118. package/__cjs/react/ssr/useSSRQuery.cjs.map +1 -1
  119. package/__cjs/react/ssr/useSSRQuery.d.cts +2 -1
  120. package/__cjs/utilities/DeepPartial.cjs.map +1 -1
  121. package/__cjs/utilities/DeepPartial.d.cts +1 -1
  122. package/__cjs/utilities/internal/DeepMerger.cjs +36 -4
  123. package/__cjs/utilities/internal/DeepMerger.cjs.map +1 -1
  124. package/__cjs/utilities/internal/DeepMerger.d.cts +20 -4
  125. package/__cjs/utilities/internal/bindCacheKey.cjs +21 -0
  126. package/__cjs/utilities/internal/bindCacheKey.cjs.map +1 -0
  127. package/__cjs/utilities/internal/bindCacheKey.d.cts +15 -0
  128. package/__cjs/utilities/internal/checkDocument.cjs +2 -4
  129. package/__cjs/utilities/internal/checkDocument.cjs.map +1 -1
  130. package/__cjs/utilities/internal/combineLatestBatched.cjs +71 -0
  131. package/__cjs/utilities/internal/combineLatestBatched.cjs.map +1 -0
  132. package/__cjs/utilities/internal/combineLatestBatched.d.cts +14 -0
  133. package/__cjs/utilities/internal/compact.cjs +1 -1
  134. package/__cjs/utilities/internal/compact.cjs.map +1 -1
  135. package/__cjs/utilities/internal/constants.cjs +26 -0
  136. package/__cjs/utilities/internal/constants.cjs.map +1 -0
  137. package/__cjs/utilities/internal/constants.d.cts +23 -0
  138. package/__cjs/utilities/internal/getStoreKeyName.cjs +1 -0
  139. package/__cjs/utilities/internal/getStoreKeyName.cjs.map +1 -1
  140. package/__cjs/utilities/internal/index.cjs +12 -2
  141. package/__cjs/utilities/internal/index.cjs.map +1 -1
  142. package/__cjs/utilities/internal/index.d.cts +6 -0
  143. package/__cjs/utilities/internal/mapObservableFragment.cjs +27 -0
  144. package/__cjs/utilities/internal/mapObservableFragment.cjs.map +1 -0
  145. package/__cjs/utilities/internal/mapObservableFragment.d.cts +3 -0
  146. package/__cjs/utilities/internal/memoize.cjs +31 -0
  147. package/__cjs/utilities/internal/memoize.cjs.map +1 -0
  148. package/__cjs/utilities/internal/memoize.d.cts +8 -0
  149. package/__cjs/utilities/internal/ponyfills/FinalizationRegistry.cjs +61 -0
  150. package/__cjs/utilities/internal/ponyfills/FinalizationRegistry.cjs.map +1 -0
  151. package/__cjs/utilities/internal/ponyfills/FinalizationRegistry.d.cts +11 -0
  152. package/__cjs/utilities/internal/ponyfills/index.cjs +6 -0
  153. package/__cjs/utilities/internal/ponyfills/index.cjs.map +1 -0
  154. package/__cjs/utilities/internal/ponyfills/index.d.cts +3 -0
  155. package/__cjs/utilities/internal/ponyfills/index.react-native.cjs +6 -0
  156. package/__cjs/utilities/internal/ponyfills/index.react-native.cjs.map +1 -0
  157. package/__cjs/utilities/internal/ponyfills/index.react-native.d.cts +2 -0
  158. package/__cjs/utilities/internal/types/ExtensionsWithStreamDetails.cjs +3 -0
  159. package/__cjs/utilities/internal/types/ExtensionsWithStreamDetails.cjs.map +1 -0
  160. package/__cjs/utilities/internal/types/ExtensionsWithStreamDetails.d.cts +12 -0
  161. package/__cjs/utilities/internal/types/StreamInfoTrie.cjs +3 -0
  162. package/__cjs/utilities/internal/types/StreamInfoTrie.cjs.map +1 -0
  163. package/__cjs/utilities/internal/types/StreamInfoTrie.d.cts +16 -0
  164. package/__cjs/version.cjs +1 -1
  165. package/cache/core/cache.d.ts +141 -25
  166. package/cache/core/cache.js +220 -55
  167. package/cache/core/cache.js.map +1 -1
  168. package/cache/core/types/Cache.d.ts +78 -17
  169. package/cache/core/types/Cache.js.map +1 -1
  170. package/cache/index.d.ts +1 -1
  171. package/cache/index.js.map +1 -1
  172. package/cache/inmemory/entityStore.js +6 -4
  173. package/cache/inmemory/entityStore.js.map +1 -1
  174. package/cache/inmemory/fragmentRegistry.js +6 -1
  175. package/cache/inmemory/fragmentRegistry.js.map +1 -1
  176. package/cache/inmemory/helpers.d.ts +1 -1
  177. package/cache/inmemory/inMemoryCache.d.ts +48 -0
  178. package/cache/inmemory/inMemoryCache.js +62 -1
  179. package/cache/inmemory/inMemoryCache.js.map +1 -1
  180. package/cache/inmemory/key-extractor.js +1 -1
  181. package/cache/inmemory/key-extractor.js.map +1 -1
  182. package/cache/inmemory/policies.d.ts +33 -6
  183. package/cache/inmemory/policies.js +65 -7
  184. package/cache/inmemory/policies.js.map +1 -1
  185. package/cache/inmemory/readFromStore.js +9 -8
  186. package/cache/inmemory/readFromStore.js.map +1 -1
  187. package/cache/inmemory/types.d.ts +3 -0
  188. package/cache/inmemory/types.js.map +1 -1
  189. package/cache/inmemory/writeToStore.d.ts +1 -1
  190. package/cache/inmemory/writeToStore.js +27 -12
  191. package/cache/inmemory/writeToStore.js.map +1 -1
  192. package/core/ApolloClient.d.ts +159 -18
  193. package/core/ApolloClient.js +32 -50
  194. package/core/ApolloClient.js.map +1 -1
  195. package/core/ObservableQuery.d.ts +2 -0
  196. package/core/ObservableQuery.js +181 -134
  197. package/core/ObservableQuery.js.map +1 -1
  198. package/core/QueryInfo.d.ts +4 -3
  199. package/core/QueryInfo.js +10 -2
  200. package/core/QueryInfo.js.map +1 -1
  201. package/core/QueryManager.d.ts +19 -2
  202. package/core/QueryManager.js +48 -26
  203. package/core/QueryManager.js.map +1 -1
  204. package/incremental/handlers/defer20220824.d.ts +15 -7
  205. package/incremental/handlers/defer20220824.js +44 -19
  206. package/incremental/handlers/defer20220824.js.map +1 -1
  207. package/incremental/handlers/graphql17Alpha9.d.ts +98 -0
  208. package/incremental/handlers/graphql17Alpha9.js +223 -0
  209. package/incremental/handlers/graphql17Alpha9.js.map +1 -0
  210. package/incremental/handlers/notImplemented.js +1 -1
  211. package/incremental/handlers/notImplemented.js.map +1 -1
  212. package/incremental/index.d.ts +1 -0
  213. package/incremental/index.js +3 -2
  214. package/incremental/index.js.map +1 -1
  215. package/incremental/types.d.ts +9 -0
  216. package/incremental/types.js.map +1 -1
  217. package/invariantErrorCodes.js +83 -61
  218. package/legacyEntryPoints/utilities/internal/ponyfills/index.d.ts +1 -0
  219. package/legacyEntryPoints/utilities/internal/ponyfills/index.js +1 -0
  220. package/legacyEntryPoints/utilities/internal/ponyfills/ponyfills.cjs +1 -0
  221. package/legacyEntryPoints/utilities/internal/ponyfills/ponyfills.d.cts +1 -0
  222. package/link/client-awareness/ClientAwarenessLink.d.ts +1 -1
  223. package/link/client-awareness/ClientAwarenessLink.js +13 -1
  224. package/link/client-awareness/ClientAwarenessLink.js.map +1 -1
  225. package/link/core/ApolloLink.js +3 -3
  226. package/link/error/index.d.ts +1 -1
  227. package/link/error/index.js +1 -1
  228. package/link/error/index.js.map +1 -1
  229. package/link/http/checkFetcher.js +1 -1
  230. package/link/http/parseAndCheckHttpResponse.js +2 -2
  231. package/link/http/parseAndCheckHttpResponse.js.map +1 -1
  232. package/link/persisted-queries/index.js +2 -2
  233. package/link/remove-typename/removeTypenameFromVariables.d.ts +3 -0
  234. package/link/remove-typename/removeTypenameFromVariables.js +51 -50
  235. package/link/remove-typename/removeTypenameFromVariables.js.map +1 -1
  236. package/link/schema/index.d.ts +1 -1
  237. package/link/schema/index.js +1 -1
  238. package/link/schema/index.js.map +1 -1
  239. package/link/ws/index.js +1 -1
  240. package/local-state/LocalState.d.ts +3 -2
  241. package/local-state/LocalState.js +29 -15
  242. package/local-state/LocalState.js.map +1 -1
  243. package/masking/types.d.ts +2 -1
  244. package/masking/types.js.map +1 -1
  245. package/package.json +15 -1
  246. package/react/hooks/internal/useDeepMemo.js +2 -0
  247. package/react/hooks/internal/useDeepMemo.js.map +1 -1
  248. package/react/hooks/useApolloClient.d.ts +1 -1
  249. package/react/hooks/useApolloClient.js +1 -1
  250. package/react/hooks/useApolloClient.js.map +1 -1
  251. package/react/hooks/useBackgroundQuery.js +1 -3
  252. package/react/hooks/useBackgroundQuery.js.map +1 -1
  253. package/react/hooks/useFragment.d.ts +65 -6
  254. package/react/hooks/useFragment.js +38 -87
  255. package/react/hooks/useFragment.js.map +1 -1
  256. package/react/hooks/useLazyQuery.js +4 -1
  257. package/react/hooks/useLazyQuery.js.map +1 -1
  258. package/react/hooks/useMutation.d.ts +13 -1
  259. package/react/hooks/useMutation.js +7 -1
  260. package/react/hooks/useMutation.js.map +1 -1
  261. package/react/hooks/useQuery.js +9 -9
  262. package/react/hooks/useQuery.js.map +1 -1
  263. package/react/hooks/useQueryRefHandlers.js +1 -3
  264. package/react/hooks/useQueryRefHandlers.js.map +1 -1
  265. package/react/hooks/useReadQuery.js +1 -3
  266. package/react/hooks/useReadQuery.js.map +1 -1
  267. package/react/hooks/useSubscription.js +1 -1
  268. package/react/hooks/useSubscription.js.map +1 -1
  269. package/react/hooks/useSuspenseFragment.d.ts +33 -7
  270. package/react/hooks/useSuspenseFragment.js +17 -17
  271. package/react/hooks/useSuspenseFragment.js.map +1 -1
  272. package/react/hooks/useSuspenseQuery.js +6 -4
  273. package/react/hooks/useSuspenseQuery.js.map +1 -1
  274. package/react/hooks-compiled/internal/useDeepMemo.js +2 -0
  275. package/react/hooks-compiled/internal/useDeepMemo.js.map +1 -1
  276. package/react/hooks-compiled/internal/useSuspenseHookCacheKey.js +0 -2
  277. package/react/hooks-compiled/internal/useSuspenseHookCacheKey.js.map +1 -1
  278. package/react/hooks-compiled/useApolloClient.d.ts +1 -1
  279. package/react/hooks-compiled/useApolloClient.js +1 -1
  280. package/react/hooks-compiled/useApolloClient.js.map +1 -1
  281. package/react/hooks-compiled/useBackgroundQuery.js +1 -3
  282. package/react/hooks-compiled/useBackgroundQuery.js.map +1 -1
  283. package/react/hooks-compiled/useFragment.d.ts +65 -6
  284. package/react/hooks-compiled/useFragment.js +110 -88
  285. package/react/hooks-compiled/useFragment.js.map +1 -1
  286. package/react/hooks-compiled/useLazyQuery.js +4 -1
  287. package/react/hooks-compiled/useLazyQuery.js.map +1 -1
  288. package/react/hooks-compiled/useLoadableQuery.js +69 -75
  289. package/react/hooks-compiled/useMutation.d.ts +13 -1
  290. package/react/hooks-compiled/useMutation.js +5 -13
  291. package/react/hooks-compiled/useMutation.js.map +1 -1
  292. package/react/hooks-compiled/useQuery.js +53 -61
  293. package/react/hooks-compiled/useQuery.js.map +1 -1
  294. package/react/hooks-compiled/useQueryRefHandlers.js +1 -5
  295. package/react/hooks-compiled/useQueryRefHandlers.js.map +1 -1
  296. package/react/hooks-compiled/useReadQuery.js +77 -14
  297. package/react/hooks-compiled/useReadQuery.js.map +1 -1
  298. package/react/hooks-compiled/useSubscription.js +237 -93
  299. package/react/hooks-compiled/useSubscription.js.map +1 -1
  300. package/react/hooks-compiled/useSuspenseFragment.d.ts +33 -7
  301. package/react/hooks-compiled/useSuspenseFragment.js +17 -17
  302. package/react/hooks-compiled/useSuspenseFragment.js.map +1 -1
  303. package/react/hooks-compiled/useSuspenseQuery.js +7 -9
  304. package/react/hooks-compiled/useSuspenseQuery.js.map +1 -1
  305. package/react/index.compiled.d.ts +1 -1
  306. package/react/index.compiled.js +1 -1
  307. package/react/index.compiled.js.map +1 -1
  308. package/react/internal/cache/FragmentReference.d.ts +2 -4
  309. package/react/internal/cache/FragmentReference.js +3 -22
  310. package/react/internal/cache/FragmentReference.js.map +1 -1
  311. package/react/internal/cache/QueryReference.d.ts +5 -0
  312. package/react/internal/cache/QueryReference.js +16 -0
  313. package/react/internal/cache/QueryReference.js.map +1 -1
  314. package/react/internal/cache/SuspenseCache.d.ts +1 -1
  315. package/react/internal/cache/SuspenseCache.js.map +1 -1
  316. package/react/internal/cache/types.d.ts +2 -2
  317. package/react/internal/cache/types.js.map +1 -1
  318. package/react/query-preloader/createQueryPreloader.js +41 -1
  319. package/react/query-preloader/createQueryPreloader.js.map +1 -1
  320. package/react/ssr/prerenderStatic.d.ts +24 -5
  321. package/react/ssr/prerenderStatic.js +17 -4
  322. package/react/ssr/prerenderStatic.js.map +1 -1
  323. package/react/ssr/useSSRQuery.d.ts +2 -1
  324. package/react/ssr/useSSRQuery.js +8 -5
  325. package/react/ssr/useSSRQuery.js.map +1 -1
  326. package/utilities/DeepPartial.d.ts +1 -1
  327. package/utilities/DeepPartial.js.map +1 -1
  328. package/utilities/internal/DeepMerger.d.ts +20 -4
  329. package/utilities/internal/DeepMerger.js +36 -4
  330. package/utilities/internal/DeepMerger.js.map +1 -1
  331. package/utilities/internal/bindCacheKey.d.ts +15 -0
  332. package/utilities/internal/bindCacheKey.js +18 -0
  333. package/utilities/internal/bindCacheKey.js.map +1 -0
  334. package/utilities/internal/checkDocument.js +2 -4
  335. package/utilities/internal/checkDocument.js.map +1 -1
  336. package/utilities/internal/combineLatestBatched.d.ts +14 -0
  337. package/utilities/internal/combineLatestBatched.js +68 -0
  338. package/utilities/internal/combineLatestBatched.js.map +1 -0
  339. package/utilities/internal/compact.js +1 -1
  340. package/utilities/internal/compact.js.map +1 -1
  341. package/utilities/internal/constants.d.ts +23 -0
  342. package/utilities/internal/constants.js +23 -0
  343. package/utilities/internal/constants.js.map +1 -0
  344. package/utilities/internal/getStoreKeyName.js +1 -0
  345. package/utilities/internal/getStoreKeyName.js.map +1 -1
  346. package/utilities/internal/index.d.ts +6 -0
  347. package/utilities/internal/index.js +4 -0
  348. package/utilities/internal/index.js.map +1 -1
  349. package/utilities/internal/mapObservableFragment.d.ts +3 -0
  350. package/utilities/internal/mapObservableFragment.js +24 -0
  351. package/utilities/internal/mapObservableFragment.js.map +1 -0
  352. package/utilities/internal/memoize.d.ts +8 -0
  353. package/utilities/internal/memoize.js +28 -0
  354. package/utilities/internal/memoize.js.map +1 -0
  355. package/utilities/internal/ponyfills/FinalizationRegistry.d.ts +11 -0
  356. package/utilities/internal/ponyfills/FinalizationRegistry.js +57 -0
  357. package/utilities/internal/ponyfills/FinalizationRegistry.js.map +1 -0
  358. package/utilities/internal/ponyfills/index.d.ts +3 -0
  359. package/utilities/internal/ponyfills/index.js +3 -0
  360. package/utilities/internal/ponyfills/index.js.map +1 -0
  361. package/utilities/internal/ponyfills/index.react-native.d.ts +2 -0
  362. package/utilities/internal/ponyfills/index.react-native.js +2 -0
  363. package/utilities/internal/ponyfills/index.react-native.js.map +1 -0
  364. package/utilities/internal/types/ExtensionsWithStreamDetails.d.ts +12 -0
  365. package/utilities/internal/types/ExtensionsWithStreamDetails.js +2 -0
  366. package/utilities/internal/types/ExtensionsWithStreamDetails.js.map +1 -0
  367. package/utilities/internal/types/StreamInfoTrie.d.ts +16 -0
  368. package/utilities/internal/types/StreamInfoTrie.js +2 -0
  369. package/utilities/internal/types/StreamInfoTrie.js.map +1 -0
  370. package/version.js +1 -1
@@ -1,8 +1,8 @@
1
1
  import { equal } from "@wry/equality";
2
- import { BehaviorSubject, Observable, share, Subject, tap } from "rxjs";
3
- import { isNetworkRequestInFlight } from "@apollo/client/utilities";
2
+ import { BehaviorSubject, filter, Observable, share, Subject, tap } from "rxjs";
3
+ import { isNetworkRequestInFlight, isNetworkRequestSettled, } from "@apollo/client/utilities";
4
4
  import { __DEV__ } from "@apollo/client/utilities/environment";
5
- import { compact, equalByQuery, filterMap, getOperationDefinition, getOperationName, getQueryDefinition, preventUnhandledRejection, toQueryResult, } from "@apollo/client/utilities/internal";
5
+ import { compact, equalByQuery, extensionsSymbol, filterMap, getOperationDefinition, getOperationName, getQueryDefinition, preventUnhandledRejection, toQueryResult, variablesUnknownSymbol, } from "@apollo/client/utilities/internal";
6
6
  import { invariant } from "@apollo/client/utilities/invariant";
7
7
  import { NetworkStatus } from "./networkStatus.js";
8
8
  const { assign, hasOwnProperty } = Object;
@@ -23,6 +23,7 @@ const empty = {
23
23
  export class ObservableQuery {
24
24
  options;
25
25
  queryName;
26
+ variablesUnknown = false;
26
27
  /**
27
28
  * @internal will be read and written from `QueryInfo`
28
29
  *
@@ -60,6 +61,9 @@ export class ObservableQuery {
60
61
  get networkStatus() {
61
62
  return this.subject.getValue().result.networkStatus;
62
63
  }
64
+ get cache() {
65
+ return this.queryManager.cache;
66
+ }
63
67
  constructor({ queryManager, options, transformedQuery = queryManager.transform(options.query), }) {
64
68
  this.queryManager = queryManager;
65
69
  // active state
@@ -71,6 +75,10 @@ export class ObservableQuery {
71
75
  const { fetchPolicy = defaultFetchPolicy,
72
76
  // Make sure we don't store "standby" as the initialFetchPolicy.
73
77
  initialFetchPolicy = fetchPolicy === "standby" ? defaultFetchPolicy : (fetchPolicy), } = options;
78
+ if (options[variablesUnknownSymbol]) {
79
+ invariant(fetchPolicy === "standby", 80);
80
+ this.variablesUnknown = true;
81
+ }
74
82
  this.lastQuery = transformedQuery;
75
83
  this.options = {
76
84
  ...options,
@@ -197,7 +205,7 @@ export class ObservableQuery {
197
205
  * @deprecated This is an internal API and should not be used directly. This can be removed or changed at any time.
198
206
  */
199
207
  getCacheDiff({ optimistic = true } = {}) {
200
- return this.queryManager.cache.diff({
208
+ return this.cache.diff({
201
209
  query: this.query,
202
210
  variables: this.variables,
203
211
  returnPartialData: true,
@@ -205,9 +213,11 @@ export class ObservableQuery {
205
213
  });
206
214
  }
207
215
  getInitialResult(initialFetchPolicy) {
208
- const fetchPolicy = this.queryManager.prioritizeCacheValues ?
209
- "cache-first"
210
- : initialFetchPolicy || this.options.fetchPolicy;
216
+ let fetchPolicy = initialFetchPolicy || this.options.fetchPolicy;
217
+ if (this.queryManager.prioritizeCacheValues &&
218
+ (fetchPolicy === "network-only" || fetchPolicy === "cache-and-network")) {
219
+ fetchPolicy = "cache-first";
220
+ }
211
221
  const cacheResult = () => {
212
222
  const diff = this.getCacheDiff();
213
223
  // TODO: queryInfo.getDiff should handle this since cache.diff returns a
@@ -308,7 +318,7 @@ export class ObservableQuery {
308
318
  }
309
319
  },
310
320
  };
311
- const cancelWatch = this.queryManager.cache.watch(watch);
321
+ const cancelWatch = this.cache.watch(watch);
312
322
  this.unsubscribeFromCache = Object.assign(() => {
313
323
  this.unsubscribeFromCache = undefined;
314
324
  cancelWatch();
@@ -372,7 +382,7 @@ export class ObservableQuery {
372
382
  const queryDef = getQueryDefinition(this.query);
373
383
  const vars = queryDef.variableDefinitions;
374
384
  if (!vars || !vars.some((v) => v.variable.name.value === "variables")) {
375
- __DEV__ && invariant.warn(77, variables, queryDef.name?.value || queryDef);
385
+ __DEV__ && invariant.warn(81, variables, queryDef.name?.value || queryDef);
376
386
  }
377
387
  }
378
388
  if (variables && !equal(this.variables, variables)) {
@@ -388,7 +398,7 @@ export class ObservableQuery {
388
398
  fetchMore({ query, variables, context, errorPolicy, updateQuery, }) {
389
399
  invariant(
390
400
  this.options.fetchPolicy !== "cache-only",
391
- 78,
401
+ 82,
392
402
  getOperationName(this.query, "(anonymous)")
393
403
  );
394
404
  const combinedOptions = {
@@ -422,7 +432,7 @@ export class ObservableQuery {
422
432
  let wasUpdated = false;
423
433
  const isCached = this.options.fetchPolicy !== "no-cache";
424
434
  if (!isCached) {
425
- invariant(updateQuery, 79);
435
+ invariant(updateQuery, 83);
426
436
  }
427
437
  const { finalize, pushNotification } = this.pushOperation(NetworkStatus.fetchMore);
428
438
  pushNotification({
@@ -430,109 +440,149 @@ export class ObservableQuery {
430
440
  kind: "N",
431
441
  value: {},
432
442
  }, { shouldEmit: 3 /* EmitBehavior.networkStatusChange */ });
433
- return this.queryManager
434
- .fetchQuery(combinedOptions, NetworkStatus.fetchMore)
435
- .then((fetchMoreResult) => {
436
- // disable the `fetchMore` override that is currently active
437
- // the next updates caused by this should not be `fetchMore` anymore,
438
- // but `ready` or whatever other calculated loading state is currently
439
- // appropriate
440
- finalize();
441
- if (isCached) {
442
- // Separately getting a diff here before the batch - `onWatchUpdated` might be
443
- // called with an `undefined` `lastDiff` on the watcher if the cache was just subscribed to.
444
- const lastDiff = this.getCacheDiff();
445
- // Performing this cache update inside a cache.batch transaction ensures
446
- // any affected cache.watch watchers are notified at most once about any
447
- // updates. Most watchers will be using the QueryInfo class, which
448
- // responds to notifications by calling reobserveCacheFirst to deliver
449
- // fetchMore cache results back to this ObservableQuery.
450
- this.queryManager.cache.batch({
451
- update: (cache) => {
452
- if (updateQuery) {
453
- cache.updateQuery({
454
- query: this.query,
455
- variables: this.variables,
456
- returnPartialData: true,
457
- optimistic: false,
458
- }, (previous) => updateQuery(previous, {
459
- fetchMoreResult: fetchMoreResult.data,
460
- variables: combinedOptions.variables,
461
- }));
462
- }
463
- else {
464
- // If we're using a field policy instead of updateQuery, the only
465
- // thing we need to do is write the new data to the cache using
466
- // combinedOptions.variables (instead of this.variables, which is
467
- // what this.updateQuery uses, because it works by abusing the
468
- // original field value, keyed by the original variables).
469
- cache.writeQuery({
470
- query: combinedOptions.query,
471
- variables: combinedOptions.variables,
472
- data: fetchMoreResult.data,
473
- });
474
- }
475
- },
476
- onWatchUpdated: (watch, diff) => {
477
- if (watch.watcher === this &&
478
- !equal(diff.result, lastDiff.result)) {
479
- wasUpdated = true;
480
- }
481
- },
482
- });
483
- }
484
- else {
485
- // There is a possibility `lastResult` may not be set when
486
- // `fetchMore` is called which would cause this to crash. This should
487
- // only happen if we haven't previously reported a result. We don't
488
- // quite know what the right behavior should be here since this block
489
- // of code runs after the fetch result has executed on the network.
490
- // We plan to let it crash in the meantime.
491
- //
492
- // If we get bug reports due to the `data` property access on
493
- // undefined, this should give us a real-world scenario that we can
494
- // use to test against and determine the right behavior. If we do end
495
- // up changing this behavior, this may require, for example, an
496
- // adjustment to the types on `updateQuery` since that function
497
- // expects that the first argument always contains previous result
498
- // data, but not `undefined`.
499
- const lastResult = this.getCurrentResult();
500
- const data = updateQuery(lastResult.data, {
501
- fetchMoreResult: fetchMoreResult.data,
502
- variables: combinedOptions.variables,
503
- });
504
- // was reportResult
505
- pushNotification({
506
- kind: "N",
507
- value: {
508
- ...lastResult,
509
- networkStatus: NetworkStatus.ready,
510
- // will be overwritten anyways, just here for types sake
511
- loading: false,
512
- data: data,
513
- dataState: lastResult.dataState === "streaming" ? "streaming" : "complete",
514
- },
515
- source: "network",
516
- });
517
- }
518
- return this.maskResult(fetchMoreResult);
519
- })
443
+ const { promise, operator } = getTrackingOperatorPromise();
444
+ const { observable } = this.queryManager.fetchObservableWithInfo(combinedOptions, { networkStatus: NetworkStatus.fetchMore, exposeExtensions: true });
445
+ const subscription = observable
446
+ .pipe(operator, filter((notification) => notification.kind === "N" && notification.source === "network"))
447
+ .subscribe({
448
+ next: (notification) => {
449
+ wasUpdated = false;
450
+ const fetchMoreResult = notification.value;
451
+ const extensions = fetchMoreResult[extensionsSymbol];
452
+ if (isNetworkRequestSettled(notification.value.networkStatus)) {
453
+ finalize();
454
+ }
455
+ if (isCached) {
456
+ // Separately getting a diff here before the batch - `onWatchUpdated` might be
457
+ // called with an `undefined` `lastDiff` on the watcher if the cache was just subscribed to.
458
+ const lastDiff = this.getCacheDiff();
459
+ // Performing this cache update inside a cache.batch transaction ensures
460
+ // any affected cache.watch watchers are notified at most once about any
461
+ // updates. Most watchers will be using the QueryInfo class, which
462
+ // responds to notifications by calling reobserveCacheFirst to deliver
463
+ // fetchMore cache results back to this ObservableQuery.
464
+ this.cache.batch({
465
+ update: (cache) => {
466
+ if (updateQuery) {
467
+ cache.updateQuery({
468
+ query: this.query,
469
+ variables: this.variables,
470
+ returnPartialData: true,
471
+ optimistic: false,
472
+ extensions,
473
+ }, (previous) => updateQuery(previous, {
474
+ fetchMoreResult: fetchMoreResult.data,
475
+ variables: combinedOptions.variables,
476
+ }));
477
+ }
478
+ else {
479
+ // If we're using a field policy instead of updateQuery, the only
480
+ // thing we need to do is write the new data to the cache using
481
+ // combinedOptions.variables (instead of this.variables, which is
482
+ // what this.updateQuery uses, because it works by abusing the
483
+ // original field value, keyed by the original variables).
484
+ cache.writeQuery({
485
+ query: combinedOptions.query,
486
+ variables: combinedOptions.variables,
487
+ data: fetchMoreResult.data,
488
+ extensions,
489
+ });
490
+ }
491
+ },
492
+ onWatchUpdated: (watch, diff) => {
493
+ if (watch.watcher === this &&
494
+ !equal(diff.result, lastDiff.result)) {
495
+ wasUpdated = true;
496
+ const lastResult = this.getCurrentResult();
497
+ // Let the cache watch from resubscribeCache handle the final
498
+ // result
499
+ if (isNetworkRequestInFlight(fetchMoreResult.networkStatus)) {
500
+ pushNotification({
501
+ kind: "N",
502
+ source: "network",
503
+ value: {
504
+ ...lastResult,
505
+ networkStatus: (fetchMoreResult.networkStatus ===
506
+ NetworkStatus.error) ?
507
+ NetworkStatus.ready
508
+ : fetchMoreResult.networkStatus,
509
+ // will be overwritten anyways, just here for types sake
510
+ loading: false,
511
+ data: diff.result,
512
+ dataState: fetchMoreResult.dataState === "streaming" ?
513
+ "streaming"
514
+ : "complete",
515
+ },
516
+ });
517
+ }
518
+ }
519
+ },
520
+ });
521
+ }
522
+ else {
523
+ // There is a possibility `lastResult` may not be set when
524
+ // `fetchMore` is called which would cause this to crash. This should
525
+ // only happen if we haven't previously reported a result. We don't
526
+ // quite know what the right behavior should be here since this block
527
+ // of code runs after the fetch result has executed on the network.
528
+ // We plan to let it crash in the meantime.
529
+ //
530
+ // If we get bug reports due to the `data` property access on
531
+ // undefined, this should give us a real-world scenario that we can
532
+ // use to test against and determine the right behavior. If we do end
533
+ // up changing this behavior, this may require, for example, an
534
+ // adjustment to the types on `updateQuery` since that function
535
+ // expects that the first argument always contains previous result
536
+ // data, but not `undefined`.
537
+ const lastResult = this.getCurrentResult();
538
+ const data = updateQuery(lastResult.data, {
539
+ fetchMoreResult: fetchMoreResult.data,
540
+ variables: combinedOptions.variables,
541
+ });
542
+ pushNotification({
543
+ kind: "N",
544
+ value: {
545
+ ...lastResult,
546
+ networkStatus: NetworkStatus.ready,
547
+ // will be overwritten anyways, just here for types sake
548
+ loading: false,
549
+ data: data,
550
+ dataState: lastResult.dataState === "streaming" ?
551
+ "streaming"
552
+ : "complete",
553
+ },
554
+ source: "network",
555
+ });
556
+ }
557
+ },
558
+ });
559
+ return preventUnhandledRejection(promise
560
+ .then((result) => toQueryResult(this.maskResult(result)))
520
561
  .finally(() => {
521
- // call `finalize` a second time in case the `.then` case above was not reached
562
+ subscription.unsubscribe();
522
563
  finalize();
523
- // In case the cache writes above did not generate a broadcast
524
- // notification (which would have been intercepted by onWatchUpdated),
525
- // likely because the written data were the same as what was already in
526
- // the cache, we still want fetchMore to deliver its final loading:false
527
- // result with the unchanged data.
528
564
  if (isCached && !wasUpdated) {
529
- pushNotification({
530
- kind: "N",
531
- source: "newNetworkStatus",
532
- value: {},
533
- }, { shouldEmit: 1 /* EmitBehavior.force */ });
565
+ const lastResult = this.getCurrentResult();
566
+ if (lastResult.dataState === "streaming") {
567
+ pushNotification({
568
+ kind: "N",
569
+ source: "network",
570
+ value: {
571
+ ...lastResult,
572
+ dataState: "complete",
573
+ networkStatus: NetworkStatus.ready,
574
+ },
575
+ });
576
+ }
577
+ else {
578
+ pushNotification({
579
+ kind: "N",
580
+ source: "newNetworkStatus",
581
+ value: {},
582
+ }, { shouldEmit: 1 /* EmitBehavior.force */ });
583
+ }
534
584
  }
535
- });
585
+ }));
536
586
  }
537
587
  // XXX the subscription variables are separate from the query variables.
538
588
  // if you want to update subscription variables, right now you have to do that separately,
@@ -558,7 +608,7 @@ export class ObservableQuery {
558
608
  onError(error);
559
609
  }
560
610
  else {
561
- invariant.error(80, error);
611
+ invariant.error(84, error);
562
612
  }
563
613
  return;
564
614
  }
@@ -636,7 +686,7 @@ export class ObservableQuery {
636
686
  previousData: result,
637
687
  });
638
688
  if (newResult) {
639
- queryManager.cache.writeQuery({
689
+ this.cache.writeQuery({
640
690
  query: this.options.query,
641
691
  data: newResult,
642
692
  variables: this.variables,
@@ -802,7 +852,7 @@ export class ObservableQuery {
802
852
  if (!this.didWarnCacheOnlyPolling &&
803
853
  pollInterval &&
804
854
  fetchPolicy === "cache-only") {
805
- __DEV__ && invariant.warn(81, getOperationName(this.query, "(anonymous)"));
855
+ __DEV__ && invariant.warn(85, getOperationName(this.query, "(anonymous)"));
806
856
  this.didWarnCacheOnlyPolling = true;
807
857
  }
808
858
  }
@@ -877,6 +927,10 @@ export class ObservableQuery {
877
927
  const oldVariables = this.variables;
878
928
  const oldFetchPolicy = this.options.fetchPolicy;
879
929
  const mergedOptions = compact(this.options, newOptions || {});
930
+ // This request will hit the network, so even if there are no variables,
931
+ // we now know that's intentional. (see #12996)
932
+ // Even if that happens only once, we want `variablesUnknown` to stay false permanently.
933
+ this.variablesUnknown &&= mergedOptions.fetchPolicy === "standby";
880
934
  const options = useDisposableObservable ?
881
935
  // Disposable Observable fetches receive a shallow copy of this.options
882
936
  // (merged with newOptions), leaving this.options unmodified.
@@ -939,15 +993,7 @@ export class ObservableQuery {
939
993
  this.cancelPolling();
940
994
  }
941
995
  this.resubscribeCache();
942
- const { promise, operator: promiseOperator } = getTrackingOperatorPromise((value) => {
943
- switch (value.kind) {
944
- case "E":
945
- throw value.error;
946
- case "N":
947
- if (value.source !== "newNetworkStatus" && !value.value.loading)
948
- return value.value;
949
- }
950
- },
996
+ const { promise, operator: promiseOperator } = getTrackingOperatorPromise(
951
997
  // This default value should only be used when using a `fetchPolicy` of
952
998
  // `standby` since that fetch policy completes without emitting a
953
999
  // result. Since we are converting this to a QueryResult type, we
@@ -1069,8 +1115,8 @@ export class ObservableQuery {
1069
1115
  const { dirty } = this;
1070
1116
  this.resetNotifications();
1071
1117
  if (dirty &&
1072
- (this.options.fetchPolicy == "cache-only" ||
1073
- this.options.fetchPolicy == "cache-and-network" ||
1118
+ (this.options.fetchPolicy === "cache-only" ||
1119
+ this.options.fetchPolicy === "cache-and-network" ||
1074
1120
  !this.activeOperations.size)) {
1075
1121
  const diff = this.getCacheDiff();
1076
1122
  if (
@@ -1154,7 +1200,9 @@ export class ObservableQuery {
1154
1200
  // "fetchMore" having priority over "polling" or "loading" network statuses
1155
1201
  // as for now we just take the "latest" operation that is still active,
1156
1202
  // as that lines up best with previous behavior[]
1157
- const operation = Array.from(this.activeOperations.values()).findLast((operation) => isEqualQuery(operation, this) && operation.override !== undefined);
1203
+ const operation = Array.from(this.activeOperations.values())
1204
+ .reverse()
1205
+ .find((operation) => isEqualQuery(operation, this) && operation.override !== undefined);
1158
1206
  return operation?.override ?? baseNetworkStatus;
1159
1207
  }
1160
1208
  abortActiveOperations() {
@@ -1298,13 +1346,13 @@ export class ObservableQuery {
1298
1346
  }
1299
1347
  export function logMissingFieldErrors(missing) {
1300
1348
  if (__DEV__ && missing) {
1301
- __DEV__ && invariant.debug(82, missing);
1349
+ __DEV__ && invariant.debug(86, missing);
1302
1350
  }
1303
1351
  }
1304
1352
  function isEqualQuery(a, b) {
1305
1353
  return !!(a && b && a.query === b.query && equal(a.variables, b.variables));
1306
1354
  }
1307
- function getTrackingOperatorPromise(filterMapCb, defaultValue) {
1355
+ function getTrackingOperatorPromise(defaultValue) {
1308
1356
  let lastValue = defaultValue, resolve, reject;
1309
1357
  const promise = new Promise((res, rej) => {
1310
1358
  resolve = res;
@@ -1312,14 +1360,13 @@ function getTrackingOperatorPromise(filterMapCb, defaultValue) {
1312
1360
  });
1313
1361
  const operator = tap({
1314
1362
  next(value) {
1315
- try {
1316
- const newValue = filterMapCb(value);
1317
- if (newValue !== undefined) {
1318
- lastValue = newValue;
1319
- }
1363
+ if (value.kind === "E") {
1364
+ return reject(value.error);
1320
1365
  }
1321
- catch (error) {
1322
- reject(error);
1366
+ if (value.kind === "N" &&
1367
+ value.source !== "newNetworkStatus" &&
1368
+ !value.value.loading) {
1369
+ lastValue = value.value;
1323
1370
  }
1324
1371
  },
1325
1372
  finalize: () => {