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
@@ -80,11 +80,11 @@ var DataChecker = /*#__PURE__*/function () {
80
80
  this._assignClientAbstractTypes(node);
81
81
  this._traverse(node, dataID);
82
82
  return this._recordWasMissing === true ? {
83
- status: 'missing',
84
- mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt
83
+ mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt,
84
+ status: 'missing'
85
85
  } : {
86
- status: 'available',
87
- mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt
86
+ mostRecentlyInvalidatedAt: this._mostRecentlyInvalidatedAt,
87
+ status: 'available'
88
88
  };
89
89
  };
90
90
  _proto._getVariableValue = function _getVariableValue(name) {
@@ -116,6 +116,15 @@ var DataChecker = /*#__PURE__*/function () {
116
116
  } finally {
117
117
  _iterator.f();
118
118
  }
119
+ if (this._log != null) {
120
+ this._log({
121
+ name: 'store.datachecker.missing',
122
+ kind: 'scalar',
123
+ dataID: dataID,
124
+ fieldName: field.name,
125
+ storageKey: getStorageKey(field, this._variables)
126
+ });
127
+ }
119
128
  this._handleMissing();
120
129
  };
121
130
  _proto._handleMissingLinkField = function _handleMissingLinkField(field, dataID) {
@@ -137,6 +146,15 @@ var DataChecker = /*#__PURE__*/function () {
137
146
  } finally {
138
147
  _iterator2.f();
139
148
  }
149
+ if (this._log != null) {
150
+ this._log({
151
+ name: 'store.datachecker.missing',
152
+ kind: 'linked',
153
+ dataID: dataID,
154
+ fieldName: field.name,
155
+ storageKey: getStorageKey(field, this._variables)
156
+ });
157
+ }
140
158
  this._handleMissing();
141
159
  };
142
160
  _proto._handleMissingPluralLinkField = function _handleMissingPluralLinkField(field, dataID) {
@@ -166,11 +184,27 @@ var DataChecker = /*#__PURE__*/function () {
166
184
  } finally {
167
185
  _iterator3.f();
168
186
  }
187
+ if (this._log != null) {
188
+ this._log({
189
+ name: 'store.datachecker.missing',
190
+ kind: 'pluralLinked',
191
+ dataID: dataID,
192
+ fieldName: field.name,
193
+ storageKey: getStorageKey(field, this._variables)
194
+ });
195
+ }
169
196
  this._handleMissing();
170
197
  };
171
198
  _proto._traverse = function _traverse(node, dataID) {
172
199
  var status = this._mutator.getStatus(dataID);
173
200
  if (status === UNKNOWN) {
201
+ if (this._log != null) {
202
+ this._log({
203
+ name: 'store.datachecker.missing',
204
+ kind: 'unknown_record',
205
+ dataID: dataID
206
+ });
207
+ }
174
208
  this._handleMissing();
175
209
  }
176
210
  if (status === EXISTENT) {
@@ -0,0 +1,373 @@
1
+ 'use strict';
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
5
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
6
+ var _require = require('../util/stableCopy'),
7
+ stableCopy = _require.stableCopy;
8
+ var _require2 = require('./ClientID'),
9
+ generateClientID = _require2.generateClientID;
10
+ var defaultGetDataID = require('./defaultGetDataID');
11
+ var RelayModernRecord = require('./RelayModernRecord');
12
+ var _require3 = require('./RelayModernSelector'),
13
+ createNormalizationSelector = _require3.createNormalizationSelector;
14
+ var _require4 = require('./RelayStoreUtils'),
15
+ ROOT_ID = _require4.ROOT_ID,
16
+ ROOT_TYPE = _require4.ROOT_TYPE,
17
+ getStorageKey = _require4.getStorageKey;
18
+ function err(message) {
19
+ var e = new Error(message);
20
+ void e.stack;
21
+ return e;
22
+ }
23
+ function stableStringify(value) {
24
+ var _JSON$stringify;
25
+ return (_JSON$stringify = JSON.stringify(stableCopy(value))) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : '';
26
+ }
27
+ var NormalizationEngine = /*#__PURE__*/function () {
28
+ function NormalizationEngine(config) {
29
+ var _config$operationLoad, _config$getDataID, _config$treatMissingF, _ref, _config$operation$use, _config$operation$exe;
30
+ this._normalizeResponse = config.normalizeResponse;
31
+ this._operationLoader = (_config$operationLoad = config.operationLoader) !== null && _config$operationLoad !== void 0 ? _config$operationLoad : null;
32
+ this._rootSelector = {
33
+ dataID: ROOT_ID,
34
+ node: config.operation,
35
+ variables: config.variables
36
+ };
37
+ this._options = {
38
+ deferDeduplicatedFields: false,
39
+ getDataID: (_config$getDataID = config.getDataID) !== null && _config$getDataID !== void 0 ? _config$getDataID : defaultGetDataID,
40
+ log: null,
41
+ path: [],
42
+ treatMissingFieldsAsNull: (_config$treatMissingF = config.treatMissingFieldsAsNull) !== null && _config$treatMissingF !== void 0 ? _config$treatMissingF : false
43
+ };
44
+ this._useExecTimeResolvers = (_ref = (_config$operation$use = config.operation.use_exec_time_resolvers) !== null && _config$operation$use !== void 0 ? _config$operation$use : ((_config$operation$exe = config.operation.exec_time_resolvers_enabled_provider) === null || _config$operation$exe === void 0 ? void 0 : _config$operation$exe.get()) === true) !== null && _ref !== void 0 ? _ref : false;
45
+ this._placeholders = new Map();
46
+ this._bufferedResponses = new Map();
47
+ this._parentRecords = new Map();
48
+ this._serverComplete = false;
49
+ }
50
+ var _proto = NormalizationEngine.prototype;
51
+ _proto.processResponse = function processResponse(response) {
52
+ var payload = this._normalizeResponse(response, this._rootSelector, ROOT_TYPE, this._options, this._useExecTimeResolvers);
53
+ var extraPayloads = [];
54
+ var pendingModules = [];
55
+ if (payload.incrementalPlaceholders != null && payload.incrementalPlaceholders.length > 0) {
56
+ this._registerPlaceholders(payload.incrementalPlaceholders, payload.source, payload.fieldPayloads, extraPayloads, pendingModules);
57
+ }
58
+ if (payload.followupPayloads != null && payload.followupPayloads.length > 0) {
59
+ this._processFollowups(payload.followupPayloads, extraPayloads, pendingModules);
60
+ }
61
+ var primaryPayload = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, payload), {}, {
62
+ followupPayloads: null,
63
+ incrementalPlaceholders: null,
64
+ isFinal: this._computeIsFinal(payload.isFinal),
65
+ isPreNormalized: true
66
+ });
67
+ return {
68
+ payloads: [primaryPayload].concat(extraPayloads),
69
+ pendingModules: pendingModules
70
+ };
71
+ };
72
+ _proto.processIncrementalResponse = function processIncrementalResponse(response) {
73
+ var label = response.label;
74
+ var path = response.path;
75
+ if (label == null || path == null) {
76
+ throw err('NormalizationEngine: Expected incremental response to have ' + '`label` and `path` properties.');
77
+ }
78
+ var isDefer = label.indexOf('$defer$') !== -1;
79
+ var pathKey = isDefer ? path.map(String).join('.') : path.slice(0, -2).map(String).join('.');
80
+ var key = makeKey(label, pathKey);
81
+ var placeholder = this._placeholders.get(key);
82
+ if (placeholder == null) {
83
+ var buffer = this._bufferedResponses.get(key);
84
+ if (buffer == null) {
85
+ buffer = [];
86
+ this._bufferedResponses.set(key, buffer);
87
+ }
88
+ buffer.push(response);
89
+ return null;
90
+ }
91
+ if (placeholder.kind === 'defer') {
92
+ return this._processDefer(response, path, placeholder);
93
+ } else {
94
+ return this._processStream(response, path, placeholder);
95
+ }
96
+ };
97
+ _proto.setServerComplete = function setServerComplete() {
98
+ this._serverComplete = true;
99
+ };
100
+ _proto.isFinal = function isFinal() {
101
+ return this._serverComplete && this._bufferedResponses.size === 0 && this._placeholders.size === 0;
102
+ };
103
+ _proto._processDefer = function _processDefer(response, _path, placeholder) {
104
+ var payload = this._normalizeResponse(response, placeholder.selector, placeholder.typeName, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this._options), {}, {
105
+ deferDeduplicatedFields: true,
106
+ path: placeholder.path
107
+ }), this._useExecTimeResolvers);
108
+ var extraPayloads = [];
109
+ var pendingModules = [];
110
+ if (payload.incrementalPlaceholders != null && payload.incrementalPlaceholders.length > 0) {
111
+ this._registerPlaceholders(payload.incrementalPlaceholders, payload.source, payload.fieldPayloads, extraPayloads, pendingModules);
112
+ }
113
+ if (payload.followupPayloads != null && payload.followupPayloads.length > 0) {
114
+ this._processFollowups(payload.followupPayloads, extraPayloads, pendingModules);
115
+ }
116
+ var parentID = placeholder.selector.dataID;
117
+ var parentEntry = this._parentRecords.get(parentID);
118
+ var fieldPayloads = payload.fieldPayloads;
119
+ if (parentEntry != null && parentEntry.fieldPayloads.length > 0) {
120
+ var _fieldPayloads;
121
+ fieldPayloads = ((_fieldPayloads = fieldPayloads) !== null && _fieldPayloads !== void 0 ? _fieldPayloads : []).concat(parentEntry.fieldPayloads);
122
+ }
123
+ var primaryPayload = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, payload), {}, {
124
+ fieldPayloads: fieldPayloads,
125
+ followupPayloads: null,
126
+ incrementalPlaceholders: null,
127
+ isFinal: this._computeIsFinal(payload.isFinal),
128
+ isPreNormalized: true
129
+ });
130
+ return {
131
+ payloads: [primaryPayload].concat(extraPayloads),
132
+ pendingModules: pendingModules
133
+ };
134
+ };
135
+ _proto._processStream = function _processStream(response, path, placeholder) {
136
+ var node = placeholder.node,
137
+ parentID = placeholder.parentID,
138
+ variables = placeholder.variables;
139
+ var field = node.selections[0];
140
+ if (field == null || field.kind !== 'LinkedField' || field.plural !== true) {
141
+ throw err('NormalizationEngine: Expected @stream to be used on a plural field.');
142
+ }
143
+ var _this$_normalizeStrea = this._normalizeStreamItem(response, parentID, field, variables, path, placeholder.path),
144
+ fieldPayloads = _this$_normalizeStrea.fieldPayloads,
145
+ itemID = _this$_normalizeStrea.itemID,
146
+ itemIndex = _this$_normalizeStrea.itemIndex,
147
+ prevIDs = _this$_normalizeStrea.prevIDs,
148
+ relayPayload = _this$_normalizeStrea.relayPayload,
149
+ storageKey = _this$_normalizeStrea.storageKey;
150
+ var storeUpdater = function storeUpdater(store) {
151
+ var currentParentRecord = store.get(parentID);
152
+ if (currentParentRecord == null) {
153
+ return;
154
+ }
155
+ var currentItems = currentParentRecord.getLinkedRecords(storageKey);
156
+ if (currentItems == null) {
157
+ return;
158
+ }
159
+ if (currentItems.length !== prevIDs.length || currentItems.some(function (item, i) {
160
+ return prevIDs[i] !== (item && item.getDataID());
161
+ })) {
162
+ return;
163
+ }
164
+ var nextItems = (0, _toConsumableArray2["default"])(currentItems);
165
+ nextItems[itemIndex] = store.get(itemID);
166
+ currentParentRecord.setLinkedRecords(nextItems, storageKey);
167
+ };
168
+ var mergedFieldPayloads = relayPayload.fieldPayloads;
169
+ if (fieldPayloads.length > 0) {
170
+ var _mergedFieldPayloads;
171
+ mergedFieldPayloads = ((_mergedFieldPayloads = mergedFieldPayloads) !== null && _mergedFieldPayloads !== void 0 ? _mergedFieldPayloads : []).concat(fieldPayloads);
172
+ }
173
+ return {
174
+ payloads: [(0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, relayPayload), {}, {
175
+ fieldPayloads: mergedFieldPayloads,
176
+ followupPayloads: null,
177
+ incrementalPlaceholders: null,
178
+ isFinal: this._computeIsFinal(relayPayload.isFinal),
179
+ isPreNormalized: true,
180
+ storeUpdater: storeUpdater
181
+ })],
182
+ pendingModules: []
183
+ };
184
+ };
185
+ _proto._normalizeStreamItem = function _normalizeStreamItem(response, parentID, field, variables, path, normalizationPath) {
186
+ var _field$alias, _field$concreteType, _ref2, _ref3;
187
+ var data = response.data;
188
+ if (typeof data !== 'object') {
189
+ throw err('NormalizationEngine: Expected the GraphQL @stream payload `data` ' + 'value to be an object.');
190
+ }
191
+ var responseKey = (_field$alias = field.alias) !== null && _field$alias !== void 0 ? _field$alias : field.name;
192
+ var storageKey = getStorageKey(field, variables);
193
+ var parentEntry = this._parentRecords.get(parentID);
194
+ if (parentEntry == null) {
195
+ throw err('NormalizationEngine: Expected the parent record `' + parentID + '` for @stream data to exist.');
196
+ }
197
+ var fieldPayloads = parentEntry.fieldPayloads,
198
+ parentRecord = parentEntry.record;
199
+ var prevIDs = RelayModernRecord.getLinkedRecordIDs(parentRecord, storageKey);
200
+ if (prevIDs == null) {
201
+ throw err('NormalizationEngine: Expected record `' + parentID + '` to have fetched field `' + field.name + '` with @stream.');
202
+ }
203
+ var finalPathEntry = path[path.length - 1];
204
+ var itemIndex = parseInt(finalPathEntry, 10);
205
+ if (itemIndex !== finalPathEntry || itemIndex < 0) {
206
+ throw err('NormalizationEngine: Expected path for @stream to end in a ' + 'positive integer index, got `' + String(finalPathEntry) + '`');
207
+ }
208
+ var typeName = (_field$concreteType = field.concreteType) !== null && _field$concreteType !== void 0 ? _field$concreteType : data.__typename;
209
+ if (typeof typeName !== 'string') {
210
+ throw err('NormalizationEngine: Expected @stream field `' + field.name + '` to have a __typename.');
211
+ }
212
+ var getDataID = this._options.getDataID;
213
+ var itemID = (_ref2 = (_ref3 = typeof getDataID === 'function' ? getDataID(data, typeName) : null) !== null && _ref3 !== void 0 ? _ref3 : prevIDs === null || prevIDs === void 0 ? void 0 : prevIDs[itemIndex]) !== null && _ref2 !== void 0 ? _ref2 : generateClientID(parentID, storageKey, itemIndex);
214
+ if (typeof itemID !== 'string') {
215
+ throw err('NormalizationEngine: Expected id of elements of field `' + storageKey + '` to be strings.');
216
+ }
217
+ var selector = createNormalizationSelector(field, itemID, variables);
218
+ var nextParentRecord = RelayModernRecord.clone(parentRecord);
219
+ var nextIDs = (0, _toConsumableArray2["default"])(prevIDs);
220
+ nextIDs[itemIndex] = itemID;
221
+ RelayModernRecord.setLinkedRecordIDs(nextParentRecord, storageKey, nextIDs);
222
+ this._parentRecords.set(parentID, {
223
+ fieldPayloads: fieldPayloads,
224
+ record: nextParentRecord
225
+ });
226
+ var relayPayload = this._normalizeResponse(response, selector, typeName, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this._options), {}, {
227
+ path: [].concat((0, _toConsumableArray2["default"])(normalizationPath), [responseKey, String(itemIndex)])
228
+ }), this._useExecTimeResolvers);
229
+ return {
230
+ fieldPayloads: fieldPayloads,
231
+ itemID: itemID,
232
+ itemIndex: itemIndex,
233
+ prevIDs: prevIDs,
234
+ relayPayload: relayPayload,
235
+ storageKey: storageKey
236
+ };
237
+ };
238
+ _proto._registerPlaceholders = function _registerPlaceholders(placeholders, source, fieldPayloads, outPayloads, outPendingModules) {
239
+ var _this = this;
240
+ var _loop = function _loop(i) {
241
+ var placeholder = placeholders[i];
242
+ var label = placeholder.label,
243
+ path = placeholder.path;
244
+ var pathKey = path.map(String).join('.');
245
+ var key = makeKey(label, pathKey);
246
+ _this._placeholders.set(key, placeholder);
247
+ var parentID = void 0;
248
+ if (placeholder.kind === 'stream') {
249
+ parentID = placeholder.parentID;
250
+ } else {
251
+ parentID = placeholder.selector.dataID;
252
+ }
253
+ var parentRecord = source.get(parentID);
254
+ if (parentRecord == null) {
255
+ throw err('NormalizationEngine: Expected record `' + parentID + '` to exist.');
256
+ }
257
+ var parentPayloads = (fieldPayloads !== null && fieldPayloads !== void 0 ? fieldPayloads : []).filter(function (fieldPayload) {
258
+ var fieldID = generateClientID(fieldPayload.dataID, fieldPayload.fieldKey);
259
+ return fieldPayload.dataID === parentID || fieldID === parentID;
260
+ });
261
+ var previousEntry = _this._parentRecords.get(parentID);
262
+ if (previousEntry != null) {
263
+ var nextRecord = RelayModernRecord.update(previousEntry.record, parentRecord);
264
+ var handlePayloads = new Map();
265
+ for (var j = 0; j < previousEntry.fieldPayloads.length; j++) {
266
+ var p = previousEntry.fieldPayloads[j];
267
+ handlePayloads.set(stableStringify(p), p);
268
+ }
269
+ for (var _j = 0; _j < parentPayloads.length; _j++) {
270
+ var _p = parentPayloads[_j];
271
+ handlePayloads.set(stableStringify(_p), _p);
272
+ }
273
+ _this._parentRecords.set(parentID, {
274
+ fieldPayloads: Array.from(handlePayloads.values()),
275
+ record: nextRecord
276
+ });
277
+ } else {
278
+ _this._parentRecords.set(parentID, {
279
+ fieldPayloads: parentPayloads,
280
+ record: parentRecord
281
+ });
282
+ }
283
+ var buffered = _this._bufferedResponses.get(key);
284
+ if (buffered != null) {
285
+ _this._bufferedResponses["delete"](key);
286
+ for (var _j2 = 0; _j2 < buffered.length; _j2++) {
287
+ var resp = buffered[_j2];
288
+ var result = void 0;
289
+ if (placeholder.kind === 'defer') {
290
+ result = _this._processDefer(resp, (_resp$path = resp.path) !== null && _resp$path !== void 0 ? _resp$path : [], placeholder);
291
+ } else {
292
+ result = _this._processStream(resp, (_resp$path2 = resp.path) !== null && _resp$path2 !== void 0 ? _resp$path2 : [], placeholder);
293
+ }
294
+ if (result != null) {
295
+ outPayloads.push.apply(outPayloads, (0, _toConsumableArray2["default"])(result.payloads));
296
+ outPendingModules.push.apply(outPendingModules, (0, _toConsumableArray2["default"])(result.pendingModules));
297
+ }
298
+ }
299
+ }
300
+ };
301
+ for (var i = 0; i < placeholders.length; i++) {
302
+ var _resp$path;
303
+ var _resp$path2;
304
+ _loop(i);
305
+ }
306
+ };
307
+ _proto._processFollowups = function _processFollowups(followups, outPayloads, outPendingModules) {
308
+ for (var i = 0; i < followups.length; i++) {
309
+ var followup = followups[i];
310
+ if (followup.kind === 'ModuleImportPayload') {
311
+ this._processModuleImport(followup, outPayloads, outPendingModules);
312
+ }
313
+ }
314
+ };
315
+ _proto._processModuleImport = function _processModuleImport(followup, outPayloads, outPendingModules) {
316
+ var _this2 = this;
317
+ var operationLoader = this._operationLoader;
318
+ if (operationLoader == null) {
319
+ return;
320
+ }
321
+ var node = operationLoader.get(followup.operationReference);
322
+ if (node != null) {
323
+ var result = this._normalizeFollowup(followup, node);
324
+ outPayloads.push.apply(outPayloads, (0, _toConsumableArray2["default"])(result.payloads));
325
+ outPendingModules.push.apply(outPendingModules, (0, _toConsumableArray2["default"])(result.pendingModules));
326
+ return;
327
+ }
328
+ var emptyResult = {
329
+ payloads: [],
330
+ pendingModules: []
331
+ };
332
+ outPendingModules.push(operationLoader.load(followup.operationReference).then(function (loadedNode) {
333
+ return loadedNode != null ? _this2._normalizeFollowup(followup, loadedNode) : emptyResult;
334
+ })["catch"](function (_error) {
335
+ return emptyResult;
336
+ }));
337
+ };
338
+ _proto._normalizeFollowup = function _normalizeFollowup(followup, node) {
339
+ var operationNode = node.kind === 'SplitOperation' ? node : node.operation;
340
+ var selector = createNormalizationSelector(operationNode, followup.dataID, followup.variables);
341
+ var payload = this._normalizeResponse({
342
+ data: followup.data
343
+ }, selector, followup.typeName, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, this._options), {}, {
344
+ path: followup.path
345
+ }), this._useExecTimeResolvers);
346
+ var extraPayloads = [];
347
+ var pendingModules = [];
348
+ if (payload.incrementalPlaceholders != null && payload.incrementalPlaceholders.length > 0) {
349
+ this._registerPlaceholders(payload.incrementalPlaceholders, payload.source, payload.fieldPayloads, extraPayloads, pendingModules);
350
+ }
351
+ if (payload.followupPayloads != null && payload.followupPayloads.length > 0) {
352
+ this._processFollowups(payload.followupPayloads, extraPayloads, pendingModules);
353
+ }
354
+ var primaryPayload = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, payload), {}, {
355
+ followupPayloads: null,
356
+ incrementalPlaceholders: null,
357
+ isFinal: this._computeIsFinal(payload.isFinal),
358
+ isPreNormalized: true
359
+ });
360
+ return {
361
+ payloads: [primaryPayload].concat(extraPayloads),
362
+ pendingModules: pendingModules
363
+ };
364
+ };
365
+ _proto._computeIsFinal = function _computeIsFinal(serverIsFinal) {
366
+ return (serverIsFinal || this._serverComplete) && this._bufferedResponses.size === 0;
367
+ };
368
+ return NormalizationEngine;
369
+ }();
370
+ function makeKey(label, pathKey) {
371
+ return "".concat(label, "::").concat(pathKey);
372
+ }
373
+ module.exports = NormalizationEngine;