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
@@ -13,6 +13,7 @@ var RelayConcreteVariables = require('./RelayConcreteVariables');
13
13
  var RelayModernRecord = require('./RelayModernRecord');
14
14
  var _require2 = require('./RelayStoreUtils'),
15
15
  CLIENT_EDGE_TRAVERSAL_PATH = _require2.CLIENT_EDGE_TRAVERSAL_PATH,
16
+ FIELD_GRANULAR_NOTIFICATIONS_KEY = _require2.FIELD_GRANULAR_NOTIFICATIONS_KEY,
16
17
  FRAGMENT_OWNER_KEY = _require2.FRAGMENT_OWNER_KEY,
17
18
  FRAGMENT_PROP_NAME_KEY = _require2.FRAGMENT_PROP_NAME_KEY,
18
19
  FRAGMENTS_KEY = _require2.FRAGMENTS_KEY,
@@ -20,6 +21,7 @@ var _require2 = require('./RelayStoreUtils'),
20
21
  MODULE_COMPONENT_KEY = _require2.MODULE_COMPONENT_KEY,
21
22
  ROOT_ID = _require2.ROOT_ID,
22
23
  getArgumentValues = _require2.getArgumentValues,
24
+ getFieldNotificationKey = _require2.getFieldNotificationKey,
23
25
  getModuleComponentKey = _require2.getModuleComponentKey,
24
26
  getStorageKey = _require2.getStorageKey;
25
27
  var _require3 = require('./ResolverCache'),
@@ -30,12 +32,12 @@ var _require4 = require('./ResolverFragments'),
30
32
  var _require5 = require('./TypeID'),
31
33
  generateTypeID = _require5.generateTypeID;
32
34
  var invariant = require('invariant');
33
- function read(recordSource, selector, resolverCache, resolverContext) {
34
- var reader = new RelayReader(recordSource, selector, resolverCache !== null && resolverCache !== void 0 ? resolverCache : new NoopResolverCache(), resolverContext);
35
+ function read(recordSource, selector, log, resolverCache, resolverContext) {
36
+ var reader = new RelayReader(recordSource, selector, log, resolverCache !== null && resolverCache !== void 0 ? resolverCache : new NoopResolverCache(), resolverContext);
35
37
  return reader.read();
36
38
  }
37
39
  var RelayReader = /*#__PURE__*/function () {
38
- function RelayReader(recordSource, selector, resolverCache, resolverContext) {
40
+ function RelayReader(recordSource, selector, log, resolverCache, resolverContext) {
39
41
  var _selector$clientEdgeT, _ref, _this$_owner$node$ope, _this$_owner$node$ope2;
40
42
  this._clientEdgeTraversalPath = (_selector$clientEdgeT = selector.clientEdgeTraversalPath) !== null && _selector$clientEdgeT !== void 0 && _selector$clientEdgeT.length ? (0, _toConsumableArray2["default"])(selector.clientEdgeTraversalPath) : [];
41
43
  this._missingClientEdges = [];
@@ -43,6 +45,7 @@ var RelayReader = /*#__PURE__*/function () {
43
45
  this._isMissingData = false;
44
46
  this._isWithinUnmatchedTypeRefinement = false;
45
47
  this._fieldErrors = null;
48
+ this._fieldGranularNotificationDataID = null;
46
49
  this._owner = selector.owner;
47
50
  this._useExecTimeResolvers = (_ref = (_this$_owner$node$ope = this._owner.node.operation.use_exec_time_resolvers) !== null && _this$_owner$node$ope !== void 0 ? _this$_owner$node$ope : ((_this$_owner$node$ope2 = this._owner.node.operation.exec_time_resolvers_enabled_provider) === null || _this$_owner$node$ope2 === void 0 ? void 0 : _this$_owner$node$ope2.get()) === true) !== null && _ref !== void 0 ? _ref : false;
48
51
  this._recordSource = recordSource;
@@ -53,6 +56,7 @@ var RelayReader = /*#__PURE__*/function () {
53
56
  this._fragmentName = selector.node.name;
54
57
  this._updatedDataIDs = new Set();
55
58
  this._resolverContext = resolverContext;
59
+ this._log = log;
56
60
  }
57
61
  var _proto = RelayReader.prototype;
58
62
  _proto.read = function read() {
@@ -85,14 +89,21 @@ var RelayReader = /*#__PURE__*/function () {
85
89
  this._resolverCache.notifyUpdatedSubscribers(this._updatedDataIDs);
86
90
  this._updatedDataIDs.clear();
87
91
  }
92
+ if (RelayFeatureFlags.ENABLE_READER_FRAGMENTS_LOGGING) {
93
+ var _this$_log;
94
+ (_this$_log = this._log) === null || _this$_log === void 0 ? void 0 : _this$_log.call(this, {
95
+ name: 'reader.read',
96
+ selector: this._selector
97
+ });
98
+ }
88
99
  return {
89
100
  data: data,
101
+ fieldErrors: this._fieldErrors,
90
102
  isMissingData: this._isMissingData && isDataExpectedToBePresent,
91
103
  missingClientEdges: this._missingClientEdges.length ? this._missingClientEdges : null,
92
104
  missingLiveResolverFields: this._missingLiveResolverFields,
93
105
  seenRecords: this._seenRecords,
94
- selector: this._selector,
95
- fieldErrors: this._fieldErrors
106
+ selector: this._selector
96
107
  };
97
108
  };
98
109
  _proto._maybeAddFieldErrors = function _maybeAddFieldErrors(record, storageKey) {
@@ -108,12 +119,12 @@ var RelayReader = /*#__PURE__*/function () {
108
119
  var _error$path, _this$_selector$node$2, _this$_selector$node$3;
109
120
  var error = errors[i];
110
121
  this._fieldErrors.push({
122
+ error: error,
123
+ fieldPath: ((_error$path = error.path) !== null && _error$path !== void 0 ? _error$path : []).join('.'),
124
+ handled: false,
111
125
  kind: 'relay_field_payload.error',
112
126
  owner: owner,
113
- fieldPath: ((_error$path = error.path) !== null && _error$path !== void 0 ? _error$path : []).join('.'),
114
- error: error,
115
127
  shouldThrow: (_this$_selector$node$2 = (_this$_selector$node$3 = this._selector.node.metadata) === null || _this$_selector$node$3 === void 0 ? void 0 : _this$_selector$node$3.throwOnFieldError) !== null && _this$_selector$node$2 !== void 0 ? _this$_selector$node$2 : false,
116
- handled: false,
117
128
  uiContext: undefined
118
129
  });
119
130
  }
@@ -128,15 +139,15 @@ var RelayReader = /*#__PURE__*/function () {
128
139
  }
129
140
  var owner = this._fragmentName;
130
141
  this._fieldErrors.push(((_this$_selector$node$4 = (_this$_selector$node$5 = this._selector.node.metadata) === null || _this$_selector$node$5 === void 0 ? void 0 : _this$_selector$node$5.throwOnFieldError) !== null && _this$_selector$node$4 !== void 0 ? _this$_selector$node$4 : false) ? {
131
- kind: 'missing_expected_data.throw',
132
- owner: owner,
133
142
  fieldPath: fieldName,
134
143
  handled: false,
144
+ kind: 'missing_expected_data.throw',
145
+ owner: owner,
135
146
  uiContext: undefined
136
147
  } : {
148
+ fieldPath: fieldName,
137
149
  kind: 'missing_expected_data.log',
138
150
  owner: owner,
139
- fieldPath: fieldName,
140
151
  uiContext: undefined
141
152
  });
142
153
  this._isMissingData = true;
@@ -144,23 +155,31 @@ var RelayReader = /*#__PURE__*/function () {
144
155
  var top = this._clientEdgeTraversalPath[this._clientEdgeTraversalPath.length - 1];
145
156
  if (top !== null) {
146
157
  this._missingClientEdges.push({
147
- request: top.readerClientEdge.operation,
148
- clientEdgeDestinationID: top.clientEdgeDestinationID
158
+ clientEdgeDestinationID: top.clientEdgeDestinationID,
159
+ request: top.readerClientEdge.operation
149
160
  });
150
161
  }
151
162
  }
152
163
  };
153
164
  _proto._traverse = function _traverse(node, dataID, prevData) {
154
165
  var record = this._recordSource.get(dataID);
155
- this._seenRecords.add(dataID);
166
+ var prevFieldGranularDataID = this._fieldGranularNotificationDataID;
167
+ if (record != null && RelayModernRecord.getValue(record, FIELD_GRANULAR_NOTIFICATIONS_KEY)) {
168
+ this._fieldGranularNotificationDataID = dataID;
169
+ } else {
170
+ this._seenRecords.add(dataID);
171
+ this._fieldGranularNotificationDataID = null;
172
+ }
156
173
  if (record == null) {
157
174
  if (record === undefined) {
158
175
  this._markDataAsMissing('<record>');
159
176
  }
177
+ this._fieldGranularNotificationDataID = prevFieldGranularDataID;
160
178
  return record;
161
179
  }
162
180
  var data = prevData || {};
163
181
  var hadRequiredData = this._traverseSelections(node.selections, record, data);
182
+ this._fieldGranularNotificationDataID = prevFieldGranularDataID;
164
183
  return hadRequiredData ? data : null;
165
184
  };
166
185
  _proto._getVariableValue = function _getVariableValue(name) {
@@ -186,17 +205,17 @@ var RelayReader = /*#__PURE__*/function () {
186
205
  switch (selection.action) {
187
206
  case 'THROW':
188
207
  this._fieldErrors.push({
189
- kind: 'missing_required_field.throw',
190
208
  fieldPath: fieldName,
191
- owner: owner,
192
209
  handled: false,
210
+ kind: 'missing_required_field.throw',
211
+ owner: owner,
193
212
  uiContext: undefined
194
213
  });
195
214
  return;
196
215
  case 'LOG':
197
216
  this._fieldErrors.push({
198
- kind: 'missing_required_field.log',
199
217
  fieldPath: fieldName,
218
+ kind: 'missing_required_field.log',
200
219
  owner: owner,
201
220
  uiContext: undefined
202
221
  });
@@ -273,8 +292,8 @@ var RelayReader = /*#__PURE__*/function () {
273
292
  }
274
293
  }).filter(Boolean);
275
294
  return {
276
- ok: false,
277
- errors: errors
295
+ errors: errors,
296
+ ok: false
278
297
  };
279
298
  };
280
299
  _proto._traverseSelections = function _traverseSelections(selections, record, data) {
@@ -452,23 +471,23 @@ var RelayReader = /*#__PURE__*/function () {
452
471
  if (snapshot != null) {
453
472
  return {
454
473
  data: snapshot.data,
455
- isMissingData: snapshot.isMissingData,
456
- fieldErrors: snapshot.fieldErrors
474
+ fieldErrors: snapshot.fieldErrors,
475
+ isMissingData: snapshot.isMissingData
457
476
  };
458
477
  }
459
- snapshot = read(_this._recordSource, singularReaderSelector, _this._resolverCache);
478
+ snapshot = read(_this._recordSource, singularReaderSelector, null, _this._resolverCache, undefined);
460
479
  return {
461
480
  data: snapshot.data,
462
- isMissingData: snapshot.isMissingData,
463
- fieldErrors: snapshot.fieldErrors
481
+ fieldErrors: snapshot.fieldErrors,
482
+ isMissingData: snapshot.isMissingData
464
483
  };
465
484
  };
466
485
  var evaluate = function evaluate() {
467
486
  if (fragment != null) {
468
487
  var key = {
469
- __id: parentRecordID,
470
488
  __fragmentOwner: _this._owner,
471
- __fragments: (0, _defineProperty2["default"])({}, fragment.name, fragment.args ? getArgumentValues(fragment.args, _this._variables) : {})
489
+ __fragments: (0, _defineProperty2["default"])({}, fragment.name, fragment.args ? getArgumentValues(fragment.args, _this._variables) : {}),
490
+ __id: parentRecordID
472
491
  };
473
492
  if (_this._clientEdgeTraversalPath.length > 0 && _this._clientEdgeTraversalPath[_this._clientEdgeTraversalPath.length - 1] !== null) {
474
493
  key[CLIENT_EDGE_TRAVERSAL_PATH] = (0, _toConsumableArray2["default"])(_this._clientEdgeTraversalPath);
@@ -481,9 +500,9 @@ var RelayReader = /*#__PURE__*/function () {
481
500
  resolverResult = _getResolverValue[0],
482
501
  resolverError = _getResolverValue[1];
483
502
  return {
503
+ error: resolverError,
484
504
  resolverResult: resolverResult,
485
- snapshot: snapshot,
486
- error: resolverError
505
+ snapshot: snapshot
487
506
  };
488
507
  });
489
508
  } else {
@@ -491,9 +510,9 @@ var RelayReader = /*#__PURE__*/function () {
491
510
  resolverResult = _getResolverValue2[0],
492
511
  _resolverError = _getResolverValue2[1];
493
512
  return {
513
+ error: _resolverError,
494
514
  resolverResult: resolverResult,
495
- snapshot: undefined,
496
- error: _resolverError
515
+ snapshot: undefined
497
516
  };
498
517
  }
499
518
  };
@@ -542,12 +561,12 @@ var RelayReader = /*#__PURE__*/function () {
542
561
  if (resolverError) {
543
562
  var _this$_selector$node$7, _this$_selector$node$8;
544
563
  var errorEvent = {
545
- kind: 'relay_resolver.error',
564
+ error: resolverError,
546
565
  fieldPath: fieldPath,
566
+ handled: false,
567
+ kind: 'relay_resolver.error',
547
568
  owner: this._fragmentName,
548
- error: resolverError,
549
569
  shouldThrow: (_this$_selector$node$7 = (_this$_selector$node$8 = this._selector.node.metadata) === null || _this$_selector$node$8 === void 0 ? void 0 : _this$_selector$node$8.throwOnFieldError) !== null && _this$_selector$node$7 !== void 0 ? _this$_selector$node$7 : false,
550
- handled: false,
551
570
  uiContext: undefined
552
571
  };
553
572
  if (this._fieldErrors == null) {
@@ -630,8 +649,8 @@ var RelayReader = /*#__PURE__*/function () {
630
649
  } else {
631
650
  storeID = id;
632
651
  traversalPathSegment = {
633
- readerClientEdge: field,
634
- clientEdgeDestinationID: id
652
+ clientEdgeDestinationID: id,
653
+ readerClientEdge: field
635
654
  };
636
655
  }
637
656
  var modelResolvers = field.modelResolvers;
@@ -661,6 +680,9 @@ var RelayReader = /*#__PURE__*/function () {
661
680
  var _field$alias3;
662
681
  var fieldName = (_field$alias3 = field.alias) !== null && _field$alias3 !== void 0 ? _field$alias3 : field.name;
663
682
  var storageKey = getStorageKey(field, this._variables);
683
+ if (this._fieldGranularNotificationDataID != null) {
684
+ this._seenRecords.add(getFieldNotificationKey(this._fieldGranularNotificationDataID, storageKey));
685
+ }
664
686
  var value = RelayModernRecord.getValue(record, storageKey);
665
687
  if (value === null || RelayFeatureFlags.ENABLE_NONCOMPLIANT_ERROR_HANDLING_ON_LISTS && Array.isArray(value) && value.length === 0) {
666
688
  this._maybeAddFieldErrors(record, storageKey);
@@ -674,6 +696,9 @@ var RelayReader = /*#__PURE__*/function () {
674
696
  var _field$alias4;
675
697
  var fieldName = (_field$alias4 = field.alias) !== null && _field$alias4 !== void 0 ? _field$alias4 : field.name;
676
698
  var storageKey = getStorageKey(field, this._variables);
699
+ if (this._fieldGranularNotificationDataID != null) {
700
+ this._seenRecords.add(getFieldNotificationKey(this._fieldGranularNotificationDataID, storageKey));
701
+ }
677
702
  var linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey);
678
703
  if (linkedID == null) {
679
704
  data[fieldName] = linkedID;
@@ -739,6 +764,9 @@ var RelayReader = /*#__PURE__*/function () {
739
764
  };
740
765
  _proto._readPluralLink = function _readPluralLink(field, record, data) {
741
766
  var storageKey = getStorageKey(field, this._variables);
767
+ if (this._fieldGranularNotificationDataID != null) {
768
+ this._seenRecords.add(getFieldNotificationKey(this._fieldGranularNotificationDataID, storageKey));
769
+ }
742
770
  var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
743
771
  if (linkedIDs === null || RelayFeatureFlags.ENABLE_NONCOMPLIANT_ERROR_HANDLING_ON_LISTS && Array.isArray(linkedIDs) && linkedIDs.length === 0) {
744
772
  this._maybeAddFieldErrors(record, storageKey);
@@ -791,9 +819,9 @@ var RelayReader = /*#__PURE__*/function () {
791
819
  return;
792
820
  }
793
821
  this._createFragmentPointer({
822
+ args: moduleImport.args,
794
823
  kind: 'FragmentSpread',
795
- name: moduleImport.fragmentName,
796
- args: moduleImport.args
824
+ name: moduleImport.fragmentName
797
825
  }, record, data);
798
826
  data[FRAGMENT_PROP_NAME_KEY] = moduleImport.fragmentPropName;
799
827
  data[MODULE_COMPONENT_KEY] = component;
@@ -807,6 +835,7 @@ var RelayReader = /*#__PURE__*/function () {
807
835
  fieldValue = null;
808
836
  }
809
837
  data[aliasedInlineFragment.name] = fieldValue;
838
+ return fieldValue;
810
839
  };
811
840
  _proto._readInlineFragment = function _readInlineFragment(inlineFragment, record, data, skipUnmatchedAbstractTypes) {
812
841
  if (inlineFragment.type == null) {
@@ -860,11 +889,20 @@ var RelayReader = /*#__PURE__*/function () {
860
889
  if (data[ID_KEY] == null) {
861
890
  data[ID_KEY] = RelayModernRecord.getDataID(record);
862
891
  }
863
- fragmentPointers[fragmentSpread.name] = getArgumentValues(fragmentSpread.args, this._variables, this._isWithinUnmatchedTypeRefinement);
892
+ var args = getArgumentValues(fragmentSpread.args, this._variables, this._isWithinUnmatchedTypeRefinement);
893
+ fragmentPointers[fragmentSpread.name] = args;
864
894
  data[FRAGMENT_OWNER_KEY] = this._owner;
865
895
  if (this._clientEdgeTraversalPath.length > 0 && this._clientEdgeTraversalPath[this._clientEdgeTraversalPath.length - 1] !== null) {
866
896
  data[CLIENT_EDGE_TRAVERSAL_PATH] = (0, _toConsumableArray2["default"])(this._clientEdgeTraversalPath);
867
897
  }
898
+ if (RelayFeatureFlags.ENABLE_READER_FRAGMENTS_LOGGING) {
899
+ var _this$_log2;
900
+ (_this$_log2 = this._log) === null || _this$_log2 === void 0 ? void 0 : _this$_log2.call(this, {
901
+ name: 'reader.fragmentSpread',
902
+ fragmentName: fragmentSpread.name,
903
+ data: data
904
+ });
905
+ }
868
906
  };
869
907
  _proto._createInlineDataOrResolverFragmentPointer = function _createInlineDataOrResolverFragmentPointer(fragmentSpreadOrFragment, record, data) {
870
908
  var fragmentPointers = data[FRAGMENTS_KEY];
@@ -2,8 +2,11 @@
2
2
 
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
4
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
5
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
5
6
  var RelayModernRecord = require('./RelayModernRecord');
6
7
  var RelayRecordState = require('./RelayRecordState');
8
+ var _require = require('./RelayStoreUtils'),
9
+ RELAY_RESOLVER_RECORD_TYPENAME = _require.RELAY_RESOLVER_RECORD_TYPENAME;
7
10
  var EXISTENT = RelayRecordState.EXISTENT,
8
11
  NONEXISTENT = RelayRecordState.NONEXISTENT,
9
12
  UNKNOWN = RelayRecordState.UNKNOWN;
@@ -62,6 +65,9 @@ var RelayRecordSource = /*#__PURE__*/function () {
62
65
  var _step$value = _step.value,
63
66
  key = _step$value[0],
64
67
  record = _step$value[1];
68
+ if (RelayFeatureFlags.FILTER_OUT_RELAY_RESOLVER_RECORDS && record != null && RelayModernRecord.getType(record) === RELAY_RESOLVER_RECORD_TYPENAME) {
69
+ continue;
70
+ }
65
71
  obj[key] = RelayModernRecord.toJSON(record);
66
72
  }
67
73
  } catch (err) {
@@ -150,6 +150,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
150
150
  if (resolverRecord == null) {
151
151
  return;
152
152
  }
153
+ var linkedField = field.linkedField;
153
154
  if (field.backingField.isOutputType) {
154
155
  var outputTypeRecordIDs = getOutputTypeRecordIDs(resolverRecord);
155
156
  if (outputTypeRecordIDs != null) {
@@ -159,6 +160,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
159
160
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
160
161
  var _dataID = _step.value;
161
162
  this._references.add(_dataID);
163
+ this._traverse(linkedField, _dataID);
162
164
  }
163
165
  } catch (err) {
164
166
  _iterator.e(err);
@@ -167,7 +169,6 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
167
169
  }
168
170
  }
169
171
  } else {
170
- var linkedField = field.linkedField;
171
172
  var concreteType = linkedField.concreteType;
172
173
  if (concreteType == null) {
173
174
  return;
@@ -21,6 +21,7 @@ var _require5 = require('./RelayModernSelector'),
21
21
  createNormalizationSelector = _require5.createNormalizationSelector;
22
22
  var _require6 = require('./RelayStoreUtils'),
23
23
  ROOT_ID = _require6.ROOT_ID,
24
+ ROOT_TYPE = _require6.ROOT_TYPE,
24
25
  TYPENAME_KEY = _require6.TYPENAME_KEY,
25
26
  getArgumentValues = _require6.getArgumentValues,
26
27
  getHandleStorageKey = _require6.getHandleStorageKey,
@@ -46,6 +47,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
46
47
  this._getDataId = options.getDataID;
47
48
  this._handleFieldPayloads = [];
48
49
  this._treatMissingFieldsAsNull = options.treatMissingFieldsAsNull;
50
+ this._deferDeduplicatedFields = options.deferDeduplicatedFields;
49
51
  this._incrementalPlaceholders = [];
50
52
  this._isClientExtension = false;
51
53
  this._isUnmatchedAbstractType = false;
@@ -56,6 +58,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
56
58
  this._variables = variables;
57
59
  this._shouldProcessClientComponents = options.shouldProcessClientComponents;
58
60
  this._log = options.log;
61
+ this._s2cExecutions = new Map();
59
62
  }
60
63
  var _proto = RelayResponseNormalizer.prototype;
61
64
  _proto.normalizeResponse = function normalizeResponse(node, dataID, data, errors) {
@@ -67,10 +70,19 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
67
70
  return {
68
71
  errors: errors,
69
72
  fieldPayloads: this._handleFieldPayloads,
70
- incrementalPlaceholders: this._incrementalPlaceholders,
71
73
  followupPayloads: this._followupPayloads,
72
- source: this._recordSource,
73
- isFinal: false
74
+ incrementalPlaceholders: this._incrementalPlaceholders,
75
+ isFinal: false,
76
+ s2cExecutions: this._s2cExecutions.size > 0 ? Array.from(this._s2cExecutions.entries()).map(function (_ref) {
77
+ var recordID = _ref[0],
78
+ entry = _ref[1];
79
+ return {
80
+ recordID: recordID,
81
+ selections: entry.selections,
82
+ typeName: entry.typeName
83
+ };
84
+ }) : undefined,
85
+ source: this._recordSource
74
86
  };
75
87
  };
76
88
  _proto._assignClientAbstractTypes = function _assignClientAbstractTypes(node) {
@@ -109,6 +121,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
109
121
  return typeName;
110
122
  };
111
123
  _proto._traverseSelections = function _traverseSelections(node, record, data) {
124
+ var _selection$resolverIn, _selection$backingFie;
112
125
  for (var i = 0; i < node.selections.length; i++) {
113
126
  var selection = node.selections[i];
114
127
  switch (selection.kind) {
@@ -132,40 +145,21 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
132
145
  }
133
146
  case 'InlineFragment':
134
147
  {
135
- var abstractKey = selection.abstractKey;
136
- if (abstractKey == null) {
137
- var typeName = RelayModernRecord.getType(record);
138
- if (typeName === selection.type) {
139
- this._traverseSelections(selection, record, data);
140
- }
141
- } else {
142
- var implementsInterface = Object.prototype.hasOwnProperty.call(data, abstractKey);
143
- var _typeName = RelayModernRecord.getType(record);
144
- var typeID = generateTypeID(_typeName);
145
- var typeRecord = this._recordSource.get(typeID);
146
- if (typeRecord == null) {
147
- typeRecord = RelayModernRecord.create(typeID, TYPE_SCHEMA_TYPE);
148
- this._recordSource.set(typeID, typeRecord);
149
- }
150
- RelayModernRecord.setValue(typeRecord, abstractKey, implementsInterface);
151
- if (implementsInterface) {
152
- this._traverseSelections(selection, record, data);
153
- }
154
- }
148
+ this._normalizeInlineFragment(selection, record, data);
155
149
  break;
156
150
  }
157
151
  case 'TypeDiscriminator':
158
152
  {
159
- var _abstractKey = selection.abstractKey;
160
- var _implementsInterface = Object.prototype.hasOwnProperty.call(data, _abstractKey);
161
- var _typeName2 = RelayModernRecord.getType(record);
162
- var _typeID = generateTypeID(_typeName2);
163
- var _typeRecord = this._recordSource.get(_typeID);
164
- if (_typeRecord == null) {
165
- _typeRecord = RelayModernRecord.create(_typeID, TYPE_SCHEMA_TYPE);
166
- this._recordSource.set(_typeID, _typeRecord);
153
+ var abstractKey = selection.abstractKey;
154
+ var implementsInterface = Object.prototype.hasOwnProperty.call(data, abstractKey);
155
+ var typeName = RelayModernRecord.getType(record);
156
+ var typeID = generateTypeID(typeName);
157
+ var typeRecord = this._recordSource.get(typeID);
158
+ if (typeRecord == null) {
159
+ typeRecord = RelayModernRecord.create(typeID, TYPE_SCHEMA_TYPE);
160
+ this._recordSource.set(typeID, typeRecord);
167
161
  }
168
- RelayModernRecord.setValue(_typeRecord, _abstractKey, _implementsInterface);
162
+ RelayModernRecord.setValue(typeRecord, abstractKey, implementsInterface);
169
163
  break;
170
164
  }
171
165
  case 'LinkedHandle':
@@ -178,8 +172,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
178
172
  dataID: RelayModernRecord.getDataID(record),
179
173
  fieldKey: fieldKey,
180
174
  handle: selection.handle,
181
- handleKey: handleKey,
182
- handleArgs: selection.handleArgs ? getArgumentValues(selection.handleArgs, this._variables) : {}
175
+ handleArgs: selection.handleArgs ? getArgumentValues(selection.handleArgs, this._variables) : {},
176
+ handleKey: handleKey
183
177
  });
184
178
  break;
185
179
  case 'ModuleImport':
@@ -210,11 +204,15 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
210
204
  case 'RelayLiveResolver':
211
205
  if (!this._useExecTimeResolvers) {
212
206
  this._normalizeResolver(selection, record, data);
207
+ } else if (((_selection$resolverIn = selection.resolverInfo) === null || _selection$resolverIn === void 0 ? void 0 : _selection$resolverIn.rootFragment) != null) {
208
+ this._collectS2CExecution(selection, record);
213
209
  }
214
210
  break;
215
211
  case 'ClientEdgeToClientObject':
216
212
  if (!this._useExecTimeResolvers) {
217
213
  this._normalizeResolver(selection.backingField, record, data);
214
+ } else if (((_selection$backingFie = selection.backingField.resolverInfo) === null || _selection$backingFie === void 0 ? void 0 : _selection$backingFie.rootFragment) != null) {
215
+ this._collectS2CExecution(selection, record);
218
216
  }
219
217
  break;
220
218
  default:
@@ -223,11 +221,46 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
223
221
  }
224
222
  }
225
223
  };
224
+ _proto._normalizeInlineFragment = function _normalizeInlineFragment(selection, record, data) {
225
+ var abstractKey = selection.abstractKey;
226
+ if (abstractKey == null) {
227
+ var typeName = RelayModernRecord.getType(record);
228
+ if (typeName === selection.type || typeName === ROOT_TYPE) {
229
+ this._traverseSelections(selection, record, data);
230
+ }
231
+ } else {
232
+ var implementsInterface = Object.prototype.hasOwnProperty.call(data, abstractKey);
233
+ var _typeName = RelayModernRecord.getType(record);
234
+ var typeID = generateTypeID(_typeName);
235
+ var typeRecord = this._recordSource.get(typeID);
236
+ if (typeRecord == null) {
237
+ typeRecord = RelayModernRecord.create(typeID, TYPE_SCHEMA_TYPE);
238
+ this._recordSource.set(typeID, typeRecord);
239
+ }
240
+ RelayModernRecord.setValue(typeRecord, abstractKey, implementsInterface);
241
+ if (implementsInterface) {
242
+ this._traverseSelections(selection, record, data);
243
+ }
244
+ }
245
+ };
226
246
  _proto._normalizeResolver = function _normalizeResolver(resolver, record, data) {
227
247
  if (resolver.fragment != null) {
228
- this._traverseSelections(resolver.fragment, record, data);
248
+ this._normalizeInlineFragment(resolver.fragment, record, data);
229
249
  }
230
250
  };
251
+ _proto._collectS2CExecution = function _collectS2CExecution(selection, record) {
252
+ var recordID = RelayModernRecord.getDataID(record);
253
+ var typeName = RelayModernRecord.getType(record);
254
+ var entry = this._s2cExecutions.get(recordID);
255
+ if (entry == null) {
256
+ entry = {
257
+ selections: [],
258
+ typeName: typeName
259
+ };
260
+ this._s2cExecutions.set(recordID, entry);
261
+ }
262
+ entry.selections.push(selection);
263
+ };
231
264
  _proto._normalizeDefer = function _normalizeDefer(defer, record, data) {
232
265
  var isDeferred = defer["if"] === null || this._getVariableValue(defer["if"]);
233
266
  if (process.env.NODE_ENV !== "production") {
@@ -237,13 +270,13 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
237
270
  this._traverseSelections(defer, record, data);
238
271
  } else {
239
272
  this._incrementalPlaceholders.push({
240
- kind: 'defer',
273
+ actorIdentifier: this._actorIdentifier,
241
274
  data: data,
275
+ kind: 'defer',
242
276
  label: defer.label,
243
277
  path: (0, _toConsumableArray2["default"])(this._path),
244
278
  selector: createNormalizationSelector(defer, RelayModernRecord.getDataID(record), this._variables),
245
- typeName: RelayModernRecord.getType(record),
246
- actorIdentifier: this._actorIdentifier
279
+ typeName: RelayModernRecord.getType(record)
247
280
  });
248
281
  }
249
282
  };
@@ -255,13 +288,13 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
255
288
  }
256
289
  if (isStreamed === true) {
257
290
  this._incrementalPlaceholders.push({
291
+ actorIdentifier: this._actorIdentifier,
258
292
  kind: 'stream',
259
293
  label: stream.label,
260
- path: (0, _toConsumableArray2["default"])(this._path),
261
- parentID: RelayModernRecord.getDataID(record),
262
294
  node: stream,
263
- variables: this._variables,
264
- actorIdentifier: this._actorIdentifier
295
+ parentID: RelayModernRecord.getDataID(record),
296
+ path: (0, _toConsumableArray2["default"])(this._path),
297
+ variables: this._variables
265
298
  });
266
299
  }
267
300
  };
@@ -276,15 +309,15 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
276
309
  RelayModernRecord.setValue(record, operationKey, operationReference !== null && operationReference !== void 0 ? operationReference : null);
277
310
  if (operationReference != null) {
278
311
  this._followupPayloads.push({
279
- kind: 'ModuleImportPayload',
312
+ actorIdentifier: this._actorIdentifier,
280
313
  args: moduleImport.args,
281
314
  data: data,
282
315
  dataID: RelayModernRecord.getDataID(record),
316
+ kind: 'ModuleImportPayload',
283
317
  operationReference: operationReference,
284
318
  path: (0, _toConsumableArray2["default"])(this._path),
285
319
  typeName: typeName,
286
- variables: this._variables,
287
- actorIdentifier: this._actorIdentifier
320
+ variables: this._variables
288
321
  });
289
322
  }
290
323
  };
@@ -296,7 +329,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
296
329
  var isNoncompliantlyNullish = RelayFeatureFlags.ENABLE_NONCOMPLIANT_ERROR_HANDLING_ON_LISTS && Array.isArray(fieldValue) && fieldValue.length === 0;
297
330
  if (fieldValue == null || isNoncompliantlyNullish) {
298
331
  if (fieldValue === undefined) {
299
- var isOptionalField = this._isClientExtension || this._isUnmatchedAbstractType;
332
+ var isOptionalField = this._isClientExtension || this._isUnmatchedAbstractType || this._deferDeduplicatedFields;
300
333
  if (isOptionalField) {
301
334
  return;
302
335
  } else if (!this._treatMissingFieldsAsNull) {
@@ -381,14 +414,14 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
381
414
  !(typeof nextID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected id on field `%s` to be a string.', storageKey) : invariant(false) : void 0;
382
415
  RelayModernRecord.setActorLinkedRecordID(record, storageKey, actorIdentifier, nextID);
383
416
  this._followupPayloads.push({
384
- kind: 'ActorPayload',
417
+ actorIdentifier: actorIdentifier,
385
418
  data: fieldValue,
386
419
  dataID: nextID,
420
+ kind: 'ActorPayload',
421
+ node: field,
387
422
  path: [].concat((0, _toConsumableArray2["default"])(this._path), [responseKey]),
388
423
  typeName: typeName,
389
- variables: this._variables,
390
- node: field,
391
- actorIdentifier: actorIdentifier
424
+ variables: this._variables
392
425
  });
393
426
  };
394
427
  _proto._normalizeLink = function _normalizeLink(field, record, storageKey, fieldValue) {
@@ -452,8 +485,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
452
485
  if (!expected) {
453
486
  var logEvent = {
454
487
  name: 'idCollision.typename',
455
- previous_typename: RelayModernRecord.getType(record),
456
- new_typename: typeName
488
+ new_typename: typeName,
489
+ previous_typename: RelayModernRecord.getType(record)
457
490
  };
458
491
  if (this._log != null) {
459
492
  this._log(logEvent);
@@ -462,10 +495,10 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
462
495
  }
463
496
  if (process.env.NODE_ENV !== "production") {
464
497
  var _field$concreteType5;
465
- var _typeName3 = (_field$concreteType5 = field.concreteType) !== null && _field$concreteType5 !== void 0 ? _field$concreteType5 : this._getRecordType(payload);
498
+ var _typeName2 = (_field$concreteType5 = field.concreteType) !== null && _field$concreteType5 !== void 0 ? _field$concreteType5 : this._getRecordType(payload);
466
499
  var _dataID = RelayModernRecord.getDataID(record);
467
- var _expected = isClientID(_dataID) && _dataID !== ROOT_ID || RelayModernRecord.getType(record) === _typeName3;
468
- process.env.NODE_ENV !== "production" ? warning(_expected, 'RelayResponseNormalizer: Invalid record `%s`. Expected %s to be ' + 'consistent, but the record was assigned conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', _dataID, TYPENAME_KEY, RelayModernRecord.getType(record), _typeName3) : void 0;
500
+ var _expected = isClientID(_dataID) && _dataID !== ROOT_ID || RelayModernRecord.getType(record) === _typeName2;
501
+ process.env.NODE_ENV !== "production" ? warning(_expected, 'RelayResponseNormalizer: Invalid record `%s`. Expected %s to be ' + 'consistent, but the record was assigned conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', _dataID, TYPENAME_KEY, RelayModernRecord.getType(record), _typeName2) : void 0;
469
502
  }
470
503
  };
471
504
  _proto._validateConflictingFieldsWithIdenticalId = function _validateConflictingFieldsWithIdenticalId(record, storageKey, fieldValue) {