relay-runtime 20.1.1 → 21.0.1

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 (334) hide show
  1. package/experimental.d.ts +34 -0
  2. package/experimental.js +1 -1
  3. package/experimental.js.flow +11 -11
  4. package/handlers/RelayDefaultHandlerProvider.d.ts +12 -0
  5. package/handlers/connection/ConnectionHandler.d.ts +51 -0
  6. package/handlers/connection/ConnectionHandler.js.flow +5 -5
  7. package/handlers/connection/ConnectionInterface.d.ts +40 -0
  8. package/handlers/connection/ConnectionInterface.js.flow +1 -1
  9. package/handlers/connection/MutationHandlers.d.ts +17 -0
  10. package/index.d.ts +274 -0
  11. package/index.js +1 -1
  12. package/index.js.flow +125 -62
  13. package/lib/experimental.js +3 -3
  14. package/lib/index.js +105 -57
  15. package/lib/multi-actor-environment/ActorIdentifier.js +2 -2
  16. package/lib/multi-actor-environment/MultiActorEnvironment.js +3 -1
  17. package/lib/mutations/commitMutation.js +8 -8
  18. package/lib/mutations/validateMutation.js +4 -4
  19. package/lib/query/GraphQLTag.js +3 -3
  20. package/lib/query/fetchQuery.js +15 -3
  21. package/lib/store/DataChecker.js +38 -4
  22. package/lib/store/NormalizationEngine.js +373 -0
  23. package/lib/store/OperationExecutor.js +172 -113
  24. package/lib/store/RelayConcreteVariables.js +1 -1
  25. package/lib/store/RelayErrorTrie.js +2 -2
  26. package/lib/store/RelayExperimentalGraphResponseTransform.js +8 -8
  27. package/lib/store/RelayModernEnvironment.js +26 -19
  28. package/lib/store/RelayModernRecord.js +18 -8
  29. package/lib/store/RelayModernSelector.js +9 -9
  30. package/lib/store/RelayModernStore.js +152 -43
  31. package/lib/store/RelayPublishQueue.js +1 -1
  32. package/lib/store/RelayReader.js +76 -38
  33. package/lib/store/RelayRecordSource.js +6 -0
  34. package/lib/store/RelayReferenceMarker.js +2 -1
  35. package/lib/store/RelayResponseNormalizer.js +88 -55
  36. package/lib/store/RelayStoreSubscriptions.js +34 -10
  37. package/lib/store/RelayStoreUtils.js +8 -1
  38. package/lib/store/ResolverFragments.js +2 -2
  39. package/lib/store/live-resolvers/LiveResolverCache.js +25 -9
  40. package/lib/store/observeFragmentExperimental.js +17 -1
  41. package/lib/store/observeQueryExperimental.js +2 -2
  42. package/lib/subscription/requestSubscription.js +3 -3
  43. package/lib/util/RelayError.js +3 -0
  44. package/lib/util/RelayFeatureFlags.js +6 -2
  45. package/lib/util/RelayReplaySubject.js +4 -4
  46. package/lib/util/handlePotentialSnapshotErrors.js +2 -2
  47. package/lib/util/stableCopy.js +2 -2
  48. package/llm-docs/api-reference/entrypoint-apis/entrypoint-container.mdx +38 -0
  49. package/llm-docs/api-reference/entrypoint-apis/load-entrypoint.mdx +77 -0
  50. package/llm-docs/api-reference/entrypoint-apis/use-entrypoint-loader.mdx +99 -0
  51. package/llm-docs/api-reference/graphql/graphql-directives.mdx +378 -0
  52. package/llm-docs/api-reference/hooks/_use-lazy-load-query-extra.mdx +16 -0
  53. package/llm-docs/api-reference/hooks/load-query.mdx +84 -0
  54. package/llm-docs/api-reference/hooks/relay-environment-provider.mdx +78 -0
  55. package/llm-docs/api-reference/hooks/use-client-query.mdx +65 -0
  56. package/llm-docs/api-reference/hooks/use-fragment.mdx +69 -0
  57. package/llm-docs/api-reference/hooks/use-lazy-load-query.mdx +62 -0
  58. package/llm-docs/api-reference/hooks/use-mutation.mdx +94 -0
  59. package/llm-docs/api-reference/hooks/use-pagination-fragment.mdx +166 -0
  60. package/llm-docs/api-reference/hooks/use-prefetchable-forward-pagination-fragment.mdx +134 -0
  61. package/llm-docs/api-reference/hooks/use-preloaded-query.mdx +84 -0
  62. package/llm-docs/api-reference/hooks/use-query-loader.mdx +95 -0
  63. package/llm-docs/api-reference/hooks/use-refetchable-fragment.mdx +122 -0
  64. package/llm-docs/api-reference/hooks/use-relay-environment.mdx +37 -0
  65. package/llm-docs/api-reference/hooks/use-subscription.mdx +66 -0
  66. package/llm-docs/api-reference/relay-resolvers/docblock-format.mdx +321 -0
  67. package/llm-docs/api-reference/relay-resolvers/runtime-functions.mdx +94 -0
  68. package/llm-docs/api-reference/relay-runtime/commit-mutation.mdx +65 -0
  69. package/llm-docs/api-reference/relay-runtime/fetch-query.mdx +118 -0
  70. package/llm-docs/api-reference/relay-runtime/field-logger.mdx +170 -0
  71. package/llm-docs/api-reference/relay-runtime/observe-fragment.mdx +92 -0
  72. package/llm-docs/api-reference/relay-runtime/relay-environment.mdx +53 -0
  73. package/llm-docs/api-reference/relay-runtime/request-subscription.mdx +54 -0
  74. package/llm-docs/api-reference/relay-runtime/runtime-configuration.mdx +52 -0
  75. package/llm-docs/api-reference/relay-runtime/store.mdx +734 -0
  76. package/llm-docs/api-reference/relay-runtime/wait-for-fragment-data.mdx +89 -0
  77. package/llm-docs/api-reference/types/CacheConfig.mdx +8 -0
  78. package/llm-docs/api-reference/types/Disposable.mdx +4 -0
  79. package/llm-docs/api-reference/types/GraphQLSubscriptionConfig.mdx +17 -0
  80. package/llm-docs/api-reference/types/MutationConfig.mdx +31 -0
  81. package/llm-docs/api-reference/types/SelectorStoreUpdater.mdx +6 -0
  82. package/llm-docs/api-reference/types/UploadableMap.mdx +3 -0
  83. package/llm-docs/community/learning-resources.mdx +64 -0
  84. package/llm-docs/debugging/declarative-mutation-directives.mdx +34 -0
  85. package/llm-docs/debugging/disallowed-id-types-error.mdx +43 -0
  86. package/llm-docs/debugging/inconsistent-typename-error.mdx +47 -0
  87. package/llm-docs/debugging/relay-devtools.mdx +73 -0
  88. package/llm-docs/debugging/why-null.mdx +116 -0
  89. package/llm-docs/editor-support.mdx +55 -0
  90. package/llm-docs/error-reference/unknown-field.mdx +36 -0
  91. package/llm-docs/getting-started/babel-plugin.mdx +31 -0
  92. package/llm-docs/getting-started/compiler-config.mdx +25 -0
  93. package/llm-docs/getting-started/compiler.mdx +98 -0
  94. package/llm-docs/getting-started/lint-rules.mdx +87 -0
  95. package/llm-docs/getting-started/production.mdx +30 -0
  96. package/llm-docs/getting-started/quick-start.mdx +216 -0
  97. package/llm-docs/glossary/glossary.mdx +1040 -0
  98. package/llm-docs/guided-tour/list-data/advanced-pagination.mdx +157 -0
  99. package/llm-docs/guided-tour/list-data/connections.mdx +81 -0
  100. package/llm-docs/guided-tour/list-data/pagination.mdx +193 -0
  101. package/llm-docs/guided-tour/list-data/rendering-connections.mdx +112 -0
  102. package/llm-docs/guided-tour/list-data/streaming-pagination.mdx +87 -0
  103. package/llm-docs/guided-tour/managing-data-outside-react/retaining-queries.mdx +51 -0
  104. package/llm-docs/guided-tour/refetching/refetching-queries-with-different-data.mdx +337 -0
  105. package/llm-docs/guided-tour/refetching/refreshing-queries.mdx +350 -0
  106. package/llm-docs/guided-tour/rendering/environment.mdx +59 -0
  107. package/llm-docs/guided-tour/rendering/error-states.mdx +295 -0
  108. package/llm-docs/guided-tour/rendering/fragments.mdx +354 -0
  109. package/llm-docs/guided-tour/rendering/loading-states.mdx +245 -0
  110. package/llm-docs/guided-tour/rendering/queries.mdx +261 -0
  111. package/llm-docs/guided-tour/rendering/variables.mdx +233 -0
  112. package/llm-docs/guided-tour/reusing-cached-data/fetch-policies.mdx +56 -0
  113. package/llm-docs/guided-tour/reusing-cached-data/filling-in-missing-data.mdx +102 -0
  114. package/llm-docs/guided-tour/reusing-cached-data/introduction.mdx +22 -0
  115. package/llm-docs/guided-tour/reusing-cached-data/presence-of-data.mdx +93 -0
  116. package/llm-docs/guided-tour/reusing-cached-data/rendering-partially-cached-data.mdx +175 -0
  117. package/llm-docs/guided-tour/reusing-cached-data/staleness-of-data.mdx +116 -0
  118. package/llm-docs/guided-tour/updating-data/client-only-data.mdx +115 -0
  119. package/llm-docs/guided-tour/updating-data/graphql-mutations.mdx +334 -0
  120. package/llm-docs/guided-tour/updating-data/graphql-subscriptions.mdx +279 -0
  121. package/llm-docs/guided-tour/updating-data/imperatively-modifying-linked-fields.mdx +511 -0
  122. package/llm-docs/guided-tour/updating-data/imperatively-modifying-store-data-legacy.mdx +142 -0
  123. package/llm-docs/guided-tour/updating-data/imperatively-modifying-store-data.mdx +275 -0
  124. package/llm-docs/guided-tour/updating-data/introduction.mdx +25 -0
  125. package/llm-docs/guided-tour/updating-data/local-data-updates.mdx +71 -0
  126. package/llm-docs/guided-tour/updating-data/typesafe-updaters-faq.mdx +83 -0
  127. package/llm-docs/guided-tour/updating-data/updating-connections.mdx +592 -0
  128. package/llm-docs/guides/alias-directive.mdx +160 -0
  129. package/llm-docs/guides/catch-directive.mdx +167 -0
  130. package/llm-docs/guides/client-schema-extensions.mdx +208 -0
  131. package/llm-docs/guides/codemods.mdx +79 -0
  132. package/llm-docs/guides/data-driven-dependencies/client-3d.mdx +255 -0
  133. package/llm-docs/guides/data-driven-dependencies/configuration.mdx +127 -0
  134. package/llm-docs/guides/data-driven-dependencies/introduction.mdx +39 -0
  135. package/llm-docs/guides/data-driven-dependencies/server-3d.mdx +664 -0
  136. package/llm-docs/guides/document-comparison.mdx +106 -0
  137. package/llm-docs/guides/graphql-server-specification.mdx +453 -0
  138. package/llm-docs/guides/network-layer.mdx +69 -0
  139. package/llm-docs/guides/persisted-queries.mdx +328 -0
  140. package/llm-docs/guides/relay-resolvers/context.mdx +99 -0
  141. package/llm-docs/guides/relay-resolvers/defining-fields.mdx +151 -0
  142. package/llm-docs/guides/relay-resolvers/defining-types.mdx +164 -0
  143. package/llm-docs/guides/relay-resolvers/deprecated.mdx +27 -0
  144. package/llm-docs/guides/relay-resolvers/derived-fields.mdx +127 -0
  145. package/llm-docs/guides/relay-resolvers/descriptions.mdx +44 -0
  146. package/llm-docs/guides/relay-resolvers/enabling.mdx +41 -0
  147. package/llm-docs/guides/relay-resolvers/errors.mdx +64 -0
  148. package/llm-docs/guides/relay-resolvers/field-arguments.mdx +63 -0
  149. package/llm-docs/guides/relay-resolvers/introduction.mdx +62 -0
  150. package/llm-docs/guides/relay-resolvers/limitations.mdx +30 -0
  151. package/llm-docs/guides/relay-resolvers/live-fields.mdx +164 -0
  152. package/llm-docs/guides/relay-resolvers/return-types.mdx +161 -0
  153. package/llm-docs/guides/relay-resolvers/suspense.mdx +41 -0
  154. package/llm-docs/guides/required-directive.mdx +240 -0
  155. package/llm-docs/guides/semantic-nullability.mdx +93 -0
  156. package/llm-docs/guides/testing-relay-components.mdx +642 -0
  157. package/llm-docs/guides/testing-relay-with-preloaded-queries.mdx +160 -0
  158. package/llm-docs/guides/throw-on-field-error-directive.mdx +58 -0
  159. package/llm-docs/guides/type-emission.mdx +414 -0
  160. package/llm-docs/home.mdx +32 -0
  161. package/llm-docs/principles-and-architecture/architecture-overview.mdx +24 -0
  162. package/llm-docs/principles-and-architecture/compiler-architecture.mdx +106 -0
  163. package/llm-docs/principles-and-architecture/runtime-architecture.mdx +249 -0
  164. package/llm-docs/principles-and-architecture/thinking-in-graphql.mdx +309 -0
  165. package/llm-docs/principles-and-architecture/thinking-in-relay.mdx +104 -0
  166. package/llm-docs/principles-and-architecture/videos.mdx +50 -0
  167. package/llm-docs/tutorial/arrays-lists.mdx +126 -0
  168. package/llm-docs/tutorial/fragments-1.mdx +487 -0
  169. package/llm-docs/tutorial/graphql.mdx +172 -0
  170. package/llm-docs/tutorial/interfaces-polymorphism.mdx +161 -0
  171. package/llm-docs/tutorial/intro.mdx +58 -0
  172. package/llm-docs/tutorial/mutations-updates.mdx +624 -0
  173. package/llm-docs/tutorial/organizing-mutations-queries-and-subscriptions.mdx +13 -0
  174. package/llm-docs/tutorial/queries-1.mdx +267 -0
  175. package/llm-docs/tutorial/queries-2.mdx +389 -0
  176. package/llm-docs/tutorial/refetchable-fragments.mdx +352 -0
  177. package/multi-actor-environment/ActorIdentifier.d.ts +17 -0
  178. package/multi-actor-environment/ActorIdentifier.js.flow +2 -2
  179. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +15 -15
  180. package/multi-actor-environment/ActorUtils.js.flow +1 -1
  181. package/multi-actor-environment/MultiActorEnvironment.d.ts +123 -0
  182. package/multi-actor-environment/MultiActorEnvironment.js.flow +32 -24
  183. package/multi-actor-environment/MultiActorEnvironmentTypes.d.ts +225 -0
  184. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +6 -6
  185. package/multi-actor-environment/index.d.ts +14 -0
  186. package/multi-actor-environment.d.ts +8 -0
  187. package/mutations/RelayDeclarativeMutationConfig.d.ts +70 -0
  188. package/mutations/RelayDeclarativeMutationConfig.js.flow +9 -9
  189. package/mutations/RelayRecordProxy.js.flow +8 -11
  190. package/mutations/RelayRecordSourceMutator.js.flow +4 -4
  191. package/mutations/RelayRecordSourceProxy.js.flow +4 -4
  192. package/mutations/RelayRecordSourceSelectorProxy.js.flow +6 -6
  193. package/mutations/applyOptimisticMutation.d.ts +25 -0
  194. package/mutations/applyOptimisticMutation.js.flow +2 -2
  195. package/mutations/commitLocalUpdate.d.ts +10 -0
  196. package/mutations/commitMutation.d.ts +48 -0
  197. package/mutations/commitMutation.js.flow +21 -17
  198. package/mutations/createUpdatableProxy.js.flow +19 -19
  199. package/mutations/readUpdatableFragment.js.flow +3 -3
  200. package/mutations/readUpdatableQuery.js.flow +3 -3
  201. package/mutations/validateMutation.js.flow +7 -7
  202. package/network/RelayNetwork.d.ts +12 -0
  203. package/network/RelayNetworkTypes.d.ts +145 -0
  204. package/network/RelayNetworkTypes.js.flow +18 -18
  205. package/network/RelayObservable.d.ts +197 -0
  206. package/network/RelayObservable.js.flow +32 -30
  207. package/network/RelayQueryResponseCache.d.ts +16 -0
  208. package/network/RelayQueryResponseCache.js.flow +3 -3
  209. package/network/wrapNetworkWithLogObserver.js.flow +1 -1
  210. package/package.json +2 -1
  211. package/query/GraphQLTag.d.ts +45 -0
  212. package/query/GraphQLTag.js.flow +22 -10
  213. package/query/fetchQuery.d.ts +21 -0
  214. package/query/fetchQuery.js.flow +23 -10
  215. package/query/fetchQueryInternal.d.ts +26 -0
  216. package/query/fetchQueryInternal.js.flow +4 -4
  217. package/query/fetchQuery_DEPRECATED.d.ts +17 -0
  218. package/query/fetchQuery_DEPRECATED.js.flow +1 -1
  219. package/store/ClientID.d.ts +14 -0
  220. package/store/DataChecker.js.flow +51 -15
  221. package/store/NormalizationEngine.js.flow +782 -0
  222. package/store/OperationExecutor.d.ts +51 -0
  223. package/store/OperationExecutor.js.flow +204 -98
  224. package/store/RelayConcreteVariables.js.flow +5 -5
  225. package/store/RelayErrorTrie.js.flow +12 -12
  226. package/store/RelayExperimentalGraphResponseHandler.js.flow +3 -3
  227. package/store/RelayExperimentalGraphResponseTransform.js.flow +10 -10
  228. package/store/RelayModernEnvironment.d.ts +97 -0
  229. package/store/RelayModernEnvironment.js.flow +58 -43
  230. package/store/RelayModernFragmentSpecResolver.js.flow +1 -1
  231. package/store/RelayModernOperationDescriptor.d.ts +28 -0
  232. package/store/RelayModernOperationDescriptor.js.flow +1 -1
  233. package/store/RelayModernRecord.d.ts +92 -0
  234. package/store/RelayModernRecord.js.flow +44 -20
  235. package/store/RelayModernSelector.d.ts +123 -0
  236. package/store/RelayModernSelector.js.flow +21 -21
  237. package/store/RelayModernStore.d.ts +57 -0
  238. package/store/RelayModernStore.js.flow +219 -58
  239. package/store/RelayOperationTracker.d.ts +29 -0
  240. package/store/RelayOperationTracker.js.flow +2 -2
  241. package/store/RelayOptimisticRecordSource.js.flow +2 -2
  242. package/store/RelayPublishQueue.js.flow +29 -20
  243. package/store/RelayReader.js.flow +129 -57
  244. package/store/RelayRecordSource.d.ts +26 -0
  245. package/store/RelayRecordSource.js.flow +10 -0
  246. package/store/RelayRecordState.d.ts +28 -0
  247. package/store/RelayRecordState.js.flow +1 -1
  248. package/store/RelayReferenceMarker.js.flow +5 -4
  249. package/store/RelayResponseNormalizer.d.ts +28 -0
  250. package/store/RelayResponseNormalizer.js.flow +130 -62
  251. package/store/RelayStoreSubscriptions.js.flow +52 -8
  252. package/store/RelayStoreTypes.d.ts +1327 -0
  253. package/store/RelayStoreTypes.js.flow +371 -278
  254. package/store/RelayStoreUtils.d.ts +86 -0
  255. package/store/RelayStoreUtils.js.flow +16 -8
  256. package/store/ResolverCache.js.flow +2 -2
  257. package/store/ResolverFragments.d.ts +43 -0
  258. package/store/ResolverFragments.js.flow +22 -14
  259. package/store/StoreInspector.js.flow +7 -8
  260. package/store/ViewerPattern.d.ts +11 -0
  261. package/store/cloneRelayHandleSourceField.js.flow +1 -1
  262. package/store/cloneRelayScalarHandleSourceField.js.flow +1 -1
  263. package/store/createFragmentSpecResolver.d.ts +16 -0
  264. package/store/createRelayContext.js.flow +1 -1
  265. package/store/createRelayLoggingContext.js.flow +4 -4
  266. package/store/defaultGetDataID.js.flow +2 -2
  267. package/store/isRelayModernEnvironment.d.ts +8 -0
  268. package/store/isRelayModernEnvironment.js.flow +4 -2
  269. package/store/live-resolvers/LiveResolverCache.js.flow +55 -20
  270. package/store/live-resolvers/LiveResolverSuspenseSentinel.js.flow +3 -3
  271. package/store/live-resolvers/getOutputTypeRecordIDs.js.flow +1 -1
  272. package/store/live-resolvers/isLiveStateValue.js.flow +2 -2
  273. package/store/live-resolvers/resolverDataInjector.d.ts +27 -0
  274. package/store/live-resolvers/resolverDataInjector.js.flow +8 -5
  275. package/store/observeFragmentExperimental.d.ts +46 -0
  276. package/store/observeFragmentExperimental.js.flow +50 -21
  277. package/store/observeQueryExperimental.d.ts +30 -0
  278. package/store/observeQueryExperimental.js.flow +5 -5
  279. package/store/readInlineData.d.ts +19 -0
  280. package/store/readInlineData.js.flow +5 -5
  281. package/store/waitForFragmentExperimental.d.ts +49 -0
  282. package/store/waitForFragmentExperimental.js.flow +3 -3
  283. package/subscription/requestSubscription.d.ts +27 -0
  284. package/subscription/requestSubscription.js.flow +10 -10
  285. package/util/JSResourceTypes.flow.js.flow +4 -4
  286. package/util/NormalizationNode.d.ts +235 -0
  287. package/util/NormalizationNode.js.flow +127 -123
  288. package/util/ReaderNode.d.ts +264 -0
  289. package/util/ReaderNode.js.flow +156 -151
  290. package/util/RelayConcreteNode.d.ts +120 -0
  291. package/util/RelayConcreteNode.js.flow +32 -32
  292. package/util/RelayError.d.ts +13 -0
  293. package/util/RelayError.js.flow +4 -1
  294. package/util/RelayFeatureFlags.d.ts +40 -0
  295. package/util/RelayFeatureFlags.js.flow +21 -1
  296. package/util/RelayProfiler.d.ts +121 -0
  297. package/util/RelayProfiler.js.flow +1 -1
  298. package/util/RelayReplaySubject.d.ts +25 -0
  299. package/util/RelayReplaySubject.js.flow +3 -3
  300. package/util/RelayRuntimeTypes.d.ts +59 -0
  301. package/util/RelayRuntimeTypes.js.flow +36 -33
  302. package/util/createPayloadFor3DField.d.ts +17 -0
  303. package/util/createPayloadFor3DField.js.flow +9 -5
  304. package/util/deepFreeze.d.ts +8 -0
  305. package/util/deepFreeze.js.flow +2 -2
  306. package/util/getFragmentIdentifier.d.ts +10 -0
  307. package/util/getFragmentIdentifier.js.flow +1 -1
  308. package/util/getPaginationMetadata.d.ts +20 -0
  309. package/util/getPaginationMetadata.js.flow +1 -1
  310. package/util/getPaginationVariables.d.ts +20 -0
  311. package/util/getPaginationVariables.js.flow +1 -1
  312. package/util/getPendingOperationsForFragment.d.ts +18 -0
  313. package/util/getPendingOperationsForFragment.js.flow +2 -2
  314. package/util/getRefetchMetadata.d.ts +19 -0
  315. package/util/getRefetchMetadata.js.flow +6 -5
  316. package/util/getRelayHandleKey.d.ts +8 -0
  317. package/util/getRequestIdentifier.d.ts +17 -0
  318. package/util/getValueAtPath.d.ts +8 -0
  319. package/util/getValueAtPath.js.flow +3 -3
  320. package/util/handlePotentialSnapshotErrors.d.ts +14 -0
  321. package/util/handlePotentialSnapshotErrors.js.flow +5 -5
  322. package/util/isEmptyObject.js.flow +1 -1
  323. package/util/isPromise.d.ts +8 -0
  324. package/util/isPromise.js.flow +2 -2
  325. package/util/isScalarAndEqual.d.ts +8 -0
  326. package/util/isScalarAndEqual.js.flow +1 -1
  327. package/util/recycleNodesInto.d.ts +8 -0
  328. package/util/recycleNodesInto.js.flow +2 -2
  329. package/util/registerEnvironmentWithDevTools.js.flow +1 -1
  330. package/util/shallowFreeze.js.flow +1 -1
  331. package/util/stableCopy.d.ts +8 -0
  332. package/util/stableCopy.js.flow +5 -5
  333. package/util/withProvidedVariables.d.ts +19 -0
  334. package/util/withProvidedVariables.js.flow +14 -10
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { RelayObservable } from '../network/RelayObservable';
9
+ import { Environment } from '../store/RelayStoreTypes';
10
+ import {CacheConfig, FetchQueryFetchPolicy, OperationType} from '../util/RelayRuntimeTypes';
11
+ import { GraphQLTaggedNode } from './GraphQLTag';
12
+
13
+ export function fetchQuery<T extends OperationType>(
14
+ environment: Environment,
15
+ taggedNode: GraphQLTaggedNode,
16
+ variables: T['variables'],
17
+ cacheConfig?: {
18
+ networkCacheConfig?: CacheConfig | null | undefined;
19
+ fetchPolicy?: FetchQueryFetchPolicy | null | undefined;
20
+ } | null,
21
+ ): RelayObservable<T['response']>;
@@ -112,11 +112,11 @@ const invariant = require('invariant');
112
112
  * ```
113
113
  * NOTE: When using .toPromise(), the request cannot be cancelled.
114
114
  */
115
- function fetchQuery<TVariables: Variables, TData, TRawResponse>(
115
+ function fetchQuery<TVariables extends Variables, TData, TRawResponse>(
116
116
  environment: IEnvironment,
117
117
  query: Query<TVariables, TData, TRawResponse>,
118
118
  variables: NoInfer<TVariables>,
119
- options?: $ReadOnly<{
119
+ options?: Readonly<{
120
120
  fetchPolicy?: FetchQueryFetchPolicy,
121
121
  networkCacheConfig?: CacheConfig,
122
122
  }>,
@@ -139,7 +139,7 @@ function fetchQuery<TVariables: Variables, TData, TRawResponse>(
139
139
 
140
140
  function readData(snapshot: Snapshot): TData {
141
141
  handlePotentialSnapshotErrors(environment, snapshot.fieldErrors);
142
- /* $FlowFixMe[incompatible-return] we assume readData returns the right
142
+ /* $FlowFixMe[incompatible-type] we assume readData returns the right
143
143
  * data just having written it from network or checked availability. */
144
144
  return snapshot.data;
145
145
  }
@@ -151,22 +151,35 @@ function fetchQuery<TVariables: Variables, TData, TRawResponse>(
151
151
  );
152
152
  }
153
153
  case 'store-or-network': {
154
- if (environment.check(operation).status === 'available') {
155
- return RelayObservable.from<Snapshot>(
154
+ const queryAvailability = environment.check(operation);
155
+ const shouldFetch = queryAvailability.status !== 'available';
156
+ let observable;
157
+ if (!shouldFetch) {
158
+ observable = RelayObservable.from<Snapshot>(
156
159
  environment.lookup(operation.fragment),
157
160
  ).map(readData);
161
+ } else {
162
+ observable = getNetworkObservable<$FlowFixMe>(
163
+ environment,
164
+ operation,
165
+ ).map(readData);
158
166
  }
159
- return getNetworkObservable<$FlowFixMe>(environment, operation).map(
160
- readData,
161
- );
167
+ environment.__log({
168
+ name: 'fetchquery.fetch',
169
+ operation,
170
+ fetchPolicy,
171
+ queryAvailability,
172
+ shouldFetch,
173
+ });
174
+ return observable;
162
175
  }
163
176
  default:
164
- (fetchPolicy: empty);
177
+ fetchPolicy as empty;
165
178
  throw new Error('fetchQuery: Invalid fetchPolicy ' + fetchPolicy);
166
179
  }
167
180
  }
168
181
 
169
- function getNetworkObservable<TQuery: OperationType>(
182
+ function getNetworkObservable<TQuery extends OperationType>(
170
183
  environment: IEnvironment,
171
184
  operation: OperationDescriptor,
172
185
  ): RelayObservable<TQuery['response']> {
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { GraphQLResponse } from '../network/RelayNetworkTypes';
9
+ import { RelayObservable as Observable } from '../network/RelayObservable';
10
+ import {Environment, OperationDescriptor, RequestDescriptor} from '../store/RelayStoreTypes';
11
+ import { RequestIdentifier } from '../util/getRequestIdentifier';
12
+
13
+ export function fetchQuery(environment: Environment, operation: OperationDescriptor): Observable<GraphQLResponse>;
14
+
15
+ export function fetchQueryDeduped(
16
+ environment: Environment,
17
+ identifier: RequestIdentifier,
18
+ fetchFn: () => Observable<GraphQLResponse>,
19
+ ): Observable<GraphQLResponse>;
20
+
21
+ export function getPromiseForActiveRequest(environment: Environment, request: RequestDescriptor): Promise<void> | null;
22
+
23
+ export function getObservableForActiveRequest(
24
+ environment: Environment,
25
+ request: RequestDescriptor,
26
+ ): Observable<void> | null;
@@ -25,10 +25,10 @@ const RelayReplaySubject = require('../util/RelayReplaySubject');
25
25
  const invariant = require('invariant');
26
26
 
27
27
  type RequestCacheEntry = {
28
- +identifier: RequestIdentifier,
29
- +subject: RelayReplaySubject<GraphQLResponse>,
30
- +subjectForInFlightStatus: RelayReplaySubject<GraphQLResponse>,
31
- +subscription: Subscription,
28
+ readonly identifier: RequestIdentifier,
29
+ readonly subject: RelayReplaySubject<GraphQLResponse>,
30
+ readonly subjectForInFlightStatus: RelayReplaySubject<GraphQLResponse>,
31
+ readonly subscription: Subscription,
32
32
  promise: ?Promise<void>,
33
33
  };
34
34
 
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { Environment } from '../store/RelayStoreTypes';
9
+ import {CacheConfig, OperationType} from '../util/RelayRuntimeTypes';
10
+ import { GraphQLTaggedNode } from './GraphQLTag';
11
+
12
+ export function fetchQuery_DEPRECATED<T extends OperationType>(
13
+ environment: Environment,
14
+ taggedNode: GraphQLTaggedNode,
15
+ variables: T['variables'],
16
+ cacheConfig?: CacheConfig | null,
17
+ ): Promise<T['response']>;
@@ -26,7 +26,7 @@ const {getRequest} = require('./GraphQLTag');
26
26
  * order to be accessible in the result object.
27
27
  */
28
28
 
29
- function fetchQuery_DEPRECATED<T: OperationType>(
29
+ function fetchQuery_DEPRECATED<T extends OperationType>(
30
30
  environment: IEnvironment,
31
31
  taggedNode: GraphQLTaggedNode,
32
32
  variables: T['variables'],
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { DataID } from '../util/RelayRuntimeTypes';
9
+
10
+ export function generateClientID(id: DataID, storageKey: string, index?: number): DataID;
11
+
12
+ export function isClientID(id: DataID): boolean;
13
+
14
+ export function generateUniqueClientID(): DataID;
@@ -46,8 +46,8 @@ const {TYPE_SCHEMA_TYPE, generateTypeID} = require('./TypeID');
46
46
  const invariant = require('invariant');
47
47
 
48
48
  export type Availability = {
49
- +status: 'available' | 'missing',
50
- +mostRecentlyInvalidatedAt: ?number,
49
+ readonly status: 'available' | 'missing',
50
+ readonly mostRecentlyInvalidatedAt: ?number,
51
51
  };
52
52
 
53
53
  const {getModuleOperationKey, getStorageKey, getArgumentValues} =
@@ -68,7 +68,7 @@ function check(
68
68
  getTargetForActor: (actorIdentifier: ActorIdentifier) => MutableRecordSource,
69
69
  defaultActorIdentifier: ActorIdentifier,
70
70
  selector: NormalizationSelector,
71
- handlers: $ReadOnlyArray<MissingFieldHandler>,
71
+ handlers: ReadonlyArray<MissingFieldHandler>,
72
72
  operationLoader: ?OperationLoader,
73
73
  getDataID: GetDataID,
74
74
  shouldProcessClientComponents: ?boolean,
@@ -108,7 +108,7 @@ function check(
108
108
  * @private
109
109
  */
110
110
  class DataChecker {
111
- _handlers: $ReadOnlyArray<MissingFieldHandler>;
111
+ _handlers: ReadonlyArray<MissingFieldHandler>;
112
112
  _mostRecentlyInvalidatedAt: number | null;
113
113
  _mutator: RelayRecordSourceMutator;
114
114
  _operationLoader: OperationLoader | null;
@@ -118,12 +118,14 @@ class DataChecker {
118
118
  _useExecTimeResolvers: boolean;
119
119
  _variables: Variables;
120
120
  _shouldProcessClientComponents: ?boolean;
121
- +_getSourceForActor: (actorIdentifier: ActorIdentifier) => RecordSource;
122
- +_getTargetForActor: (
121
+ readonly _getSourceForActor: (
122
+ actorIdentifier: ActorIdentifier,
123
+ ) => RecordSource;
124
+ readonly _getTargetForActor: (
123
125
  actorIdentifier: ActorIdentifier,
124
126
  ) => MutableRecordSource;
125
- +_getDataID: GetDataID;
126
- +_mutatorRecordSourceProxyCache: Map<
127
+ readonly _getDataID: GetDataID;
128
+ readonly _mutatorRecordSourceProxyCache: Map<
127
129
  ActorIdentifier,
128
130
  [RelayRecordSourceMutator, RelayRecordSourceProxy],
129
131
  >;
@@ -136,7 +138,7 @@ class DataChecker {
136
138
  ) => MutableRecordSource,
137
139
  defaultActorIdentifier: ActorIdentifier,
138
140
  variables: Variables,
139
- handlers: $ReadOnlyArray<MissingFieldHandler>,
141
+ handlers: ReadonlyArray<MissingFieldHandler>,
140
142
  operationLoader: ?OperationLoader,
141
143
  getDataID: GetDataID,
142
144
  shouldProcessClientComponents: ?boolean,
@@ -193,16 +195,16 @@ class DataChecker {
193
195
 
194
196
  return this._recordWasMissing === true
195
197
  ? {
196
- status: 'missing',
197
198
  mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt,
199
+ status: 'missing',
198
200
  }
199
201
  : {
200
- status: 'available',
201
202
  mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt,
203
+ status: 'available',
202
204
  };
203
205
  }
204
206
 
205
- _getVariableValue(name: string): mixed {
207
+ _getVariableValue(name: string): unknown {
206
208
  invariant(
207
209
  this._variables.hasOwnProperty(name),
208
210
  'RelayAsyncLoader(): Undefined variable `%s`.',
@@ -218,7 +220,7 @@ class DataChecker {
218
220
  _handleMissingScalarField(
219
221
  field: NormalizationScalarField,
220
222
  dataID: DataID,
221
- ): mixed {
223
+ ): unknown {
222
224
  if (field.name === 'id' && field.alias == null && isClientID(dataID)) {
223
225
  return undefined;
224
226
  }
@@ -239,6 +241,15 @@ class DataChecker {
239
241
  }
240
242
  }
241
243
  }
244
+ if (this._log != null) {
245
+ this._log({
246
+ name: 'store.datachecker.missing',
247
+ kind: 'scalar',
248
+ dataID,
249
+ fieldName: field.name,
250
+ storageKey: getStorageKey(field, this._variables),
251
+ });
252
+ }
242
253
  this._handleMissing();
243
254
  }
244
255
 
@@ -266,6 +277,15 @@ class DataChecker {
266
277
  }
267
278
  }
268
279
  }
280
+ if (this._log != null) {
281
+ this._log({
282
+ name: 'store.datachecker.missing',
283
+ kind: 'linked',
284
+ dataID,
285
+ fieldName: field.name,
286
+ storageKey: getStorageKey(field, this._variables),
287
+ });
288
+ }
269
289
  this._handleMissing();
270
290
  }
271
291
 
@@ -299,12 +319,28 @@ class DataChecker {
299
319
  }
300
320
  }
301
321
  }
322
+ if (this._log != null) {
323
+ this._log({
324
+ name: 'store.datachecker.missing',
325
+ kind: 'pluralLinked',
326
+ dataID,
327
+ fieldName: field.name,
328
+ storageKey: getStorageKey(field, this._variables),
329
+ });
330
+ }
302
331
  this._handleMissing();
303
332
  }
304
333
 
305
334
  _traverse(node: NormalizationNode, dataID: DataID): void {
306
335
  const status = this._mutator.getStatus(dataID);
307
336
  if (status === UNKNOWN) {
337
+ if (this._log != null) {
338
+ this._log({
339
+ name: 'store.datachecker.missing',
340
+ kind: 'unknown_record',
341
+ dataID,
342
+ });
343
+ }
308
344
  this._handleMissing();
309
345
  }
310
346
 
@@ -323,7 +359,7 @@ class DataChecker {
323
359
  }
324
360
 
325
361
  _traverseSelections(
326
- selections: $ReadOnlyArray<NormalizationSelection>,
362
+ selections: ReadonlyArray<NormalizationSelection>,
327
363
  dataID: DataID,
328
364
  ): void {
329
365
  selections.forEach(selection => {
@@ -470,7 +506,7 @@ class DataChecker {
470
506
  }
471
507
  break;
472
508
  default:
473
- (selection: empty);
509
+ selection as empty;
474
510
  invariant(
475
511
  false,
476
512
  'RelayAsyncLoader(): Unexpected ast kind `%s`.',