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
@@ -53,14 +53,14 @@ class RelayRecordSourceProxy implements RecordSourceProxy {
53
53
  _getDataID: GetDataID;
54
54
  _invalidatedStore: boolean;
55
55
  _idsMarkedForInvalidation: DataIDSet;
56
- _missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>;
56
+ _missingFieldHandlers: ReadonlyArray<MissingFieldHandler>;
57
57
  _log: LogFunction;
58
58
 
59
59
  constructor(
60
60
  mutator: RelayRecordSourceMutator,
61
61
  getDataID: GetDataID,
62
62
  handlerProvider?: ?HandlerProvider,
63
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
63
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
64
64
  log: ?LogFunction,
65
65
  ) {
66
66
  this.__mutator = mutator;
@@ -176,7 +176,7 @@ class RelayRecordSourceProxy implements RecordSourceProxy {
176
176
  return this._idsMarkedForInvalidation;
177
177
  }
178
178
 
179
- readUpdatableQuery<TVariables: Variables, TData>(
179
+ readUpdatableQuery<TVariables extends Variables, TData>(
180
180
  query: UpdatableQuery<TVariables, TData>,
181
181
  variables: TVariables,
182
182
  ): UpdatableData<TData> {
@@ -188,7 +188,7 @@ class RelayRecordSourceProxy implements RecordSourceProxy {
188
188
  );
189
189
  }
190
190
 
191
- readUpdatableFragment<TFragmentType: FragmentType, TData>(
191
+ readUpdatableFragment<TFragmentType extends FragmentType, TData>(
192
192
  fragment: UpdatableFragment<TFragmentType, TData>,
193
193
  fragmentReference: HasUpdatableSpread<TFragmentType>,
194
194
  ): UpdatableData<TData> {
@@ -21,7 +21,7 @@ import type {
21
21
  SingularReaderSelector,
22
22
  UpdatableData,
23
23
  } from '../store/RelayStoreTypes';
24
- import type {ReaderLinkedField} from '../util/ReaderNode';
24
+ import type {ReaderLinkedField, ReaderSelection} from '../util/ReaderNode';
25
25
  import type {
26
26
  DataID,
27
27
  UpdatableFragment,
@@ -47,13 +47,13 @@ class RelayRecordSourceSelectorProxy implements RecordSourceSelectorProxy {
47
47
  __mutator: RelayRecordSourceMutator;
48
48
  __recordSource: RecordSourceProxy;
49
49
  _readSelector: SingularReaderSelector;
50
- _missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>;
50
+ _missingFieldHandlers: ReadonlyArray<MissingFieldHandler>;
51
51
 
52
52
  constructor(
53
53
  mutator: RelayRecordSourceMutator,
54
54
  recordSource: RecordSourceProxy,
55
55
  readSelector: SingularReaderSelector,
56
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
56
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
57
57
  ) {
58
58
  this.__mutator = mutator;
59
59
  this.__recordSource = recordSource;
@@ -90,7 +90,7 @@ class RelayRecordSourceSelectorProxy implements RecordSourceSelectorProxy {
90
90
  fieldName: string,
91
91
  plural: boolean,
92
92
  ): ReaderLinkedField {
93
- let field = selector.node.selections.find(
93
+ let field: ReaderSelection | void = selector.node.selections.find(
94
94
  selection =>
95
95
  (selection.kind === 'LinkedField' && selection.name === fieldName) ||
96
96
  (selection.kind === 'RequiredField' &&
@@ -132,7 +132,7 @@ class RelayRecordSourceSelectorProxy implements RecordSourceSelectorProxy {
132
132
  this.__recordSource.invalidateStore();
133
133
  }
134
134
 
135
- readUpdatableQuery<TVariables: Variables, TData>(
135
+ readUpdatableQuery<TVariables extends Variables, TData>(
136
136
  query: UpdatableQuery<TVariables, TData>,
137
137
  variables: TVariables,
138
138
  ): UpdatableData<TData> {
@@ -144,7 +144,7 @@ class RelayRecordSourceSelectorProxy implements RecordSourceSelectorProxy {
144
144
  );
145
145
  }
146
146
 
147
- readUpdatableFragment<TFragmentType: FragmentType, TData>(
147
+ readUpdatableFragment<TFragmentType extends FragmentType, TData>(
148
148
  fragment: UpdatableFragment<TFragmentType, TData>,
149
149
  fragmentReference: HasUpdatableSpread<TFragmentType>,
150
150
  ): UpdatableData<TData> {
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { GraphQLTaggedNode } from '../query/GraphQLTag';
9
+ import {Environment, SelectorStoreUpdater} from '../store/RelayStoreTypes';
10
+ import {Disposable, Variables} from '../util/RelayRuntimeTypes';
11
+ import { DeclarativeMutationConfig } from './RelayDeclarativeMutationConfig';
12
+
13
+ export interface OptimisticMutationConfig {
14
+ configs?: readonly DeclarativeMutationConfig[] | null | undefined;
15
+ mutation: GraphQLTaggedNode;
16
+ variables: Variables;
17
+ optimisticUpdater?: SelectorStoreUpdater | null | undefined;
18
+ optimisticResponse?: object | undefined;
19
+ }
20
+
21
+ /**
22
+ * Higher-level helper function to execute a mutation against a specific
23
+ * environment.
24
+ */
25
+ export function applyOptimisticMutation(environment: Environment, config: OptimisticMutationConfig): Disposable;
@@ -28,7 +28,7 @@ const {
28
28
  const RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
29
29
  const invariant = require('invariant');
30
30
 
31
- export type OptimisticMutationConfig<TMutation: MutationParameters> = {
31
+ export type OptimisticMutationConfig<TMutation extends MutationParameters> = {
32
32
  configs?: ?Array<DeclarativeMutationConfig>,
33
33
  mutation: GraphQLTaggedNode,
34
34
  variables: Variables,
@@ -40,7 +40,7 @@ export type OptimisticMutationConfig<TMutation: MutationParameters> = {
40
40
  * Higher-level helper function to execute a mutation against a specific
41
41
  * environment.
42
42
  */
43
- function applyOptimisticMutation<TMutation: MutationParameters>(
43
+ function applyOptimisticMutation<TMutation extends MutationParameters>(
44
44
  environment: IEnvironment,
45
45
  config: OptimisticMutationConfig<TMutation>,
46
46
  ): Disposable {
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {Environment, SelectorStoreUpdater} from '../store/RelayStoreTypes';
9
+
10
+ export function commitLocalUpdate(environment: Environment, updater: SelectorStoreUpdater): void;
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {PayloadError, UploadableMap} from '../network/RelayNetworkTypes';
9
+ import { GraphQLTaggedNode } from '../query/GraphQLTag';
10
+ import {Environment, SelectorStoreUpdater} from '../store/RelayStoreTypes';
11
+ import {CacheConfig, Disposable} from '../util/RelayRuntimeTypes';
12
+ import { DeclarativeMutationConfig } from './RelayDeclarativeMutationConfig';
13
+
14
+ export interface MutationParameters {
15
+ readonly response: Record<string, unknown>;
16
+ readonly variables: Record<string, unknown>;
17
+ readonly rawResponse?: Record<string, unknown> | undefined;
18
+ }
19
+
20
+ export interface MutationConfig<TOperation extends MutationParameters> {
21
+ configs?: DeclarativeMutationConfig[] | undefined;
22
+ cacheConfig?: CacheConfig | undefined;
23
+ mutation: GraphQLTaggedNode;
24
+ onError?: ((error: Error) => void) | null | undefined;
25
+ onCompleted?:
26
+ | ((response: TOperation['response'], errors: readonly PayloadError[] | null | undefined) => void)
27
+ | null
28
+ | undefined;
29
+ onUnsubscribe?: (() => void | null | undefined) | undefined;
30
+ /**
31
+ * An object whose type matches the raw response type of the mutation. Make sure you decorate
32
+ * your mutation with `@raw_response_type` if you are using this field.
33
+ */
34
+ optimisticResponse?: (TOperation['rawResponse'] extends Record<string, unknown> ? TOperation['rawResponse'] : never) | undefined;
35
+ optimisticUpdater?: SelectorStoreUpdater<TOperation['response']> | null | undefined;
36
+ updater?: SelectorStoreUpdater<TOperation['response']> | null | undefined;
37
+ uploadables?: UploadableMap | null | undefined;
38
+ variables: TOperation['variables'];
39
+ }
40
+
41
+ /**
42
+ * Higher-level helper function to execute a mutation against a specific
43
+ * environment.
44
+ */
45
+ export function commitMutation<TOperation extends MutationParameters = MutationParameters>(
46
+ environment: Environment,
47
+ config: MutationConfig<TOperation>,
48
+ ): Disposable;
@@ -37,7 +37,7 @@ const validateMutation = require('./validateMutation');
37
37
  const invariant = require('invariant');
38
38
  const warning = require('warning');
39
39
 
40
- export type MutationConfig<TMutation: MutationParameters> = $ReadOnly<{
40
+ export type MutationConfig<TMutation extends MutationParameters> = Readonly<{
41
41
  cacheConfig?: CacheConfig,
42
42
  configs?: Array<DeclarativeMutationConfig>,
43
43
  mutation: GraphQLTaggedNode,
@@ -49,7 +49,7 @@ export type MutationConfig<TMutation: MutationParameters> = $ReadOnly<{
49
49
  onNext?: ?() => void,
50
50
  onUnsubscribe?: ?() => void,
51
51
  optimisticResponse?: {
52
- +rawResponse?: {...},
52
+ readonly rawResponse?: {...},
53
53
  ...TMutation,
54
54
  ...
55
55
  }['rawResponse'],
@@ -59,7 +59,7 @@ export type MutationConfig<TMutation: MutationParameters> = $ReadOnly<{
59
59
  variables: TMutation['variables'],
60
60
  }>;
61
61
 
62
- export type CommitMutationConfig<TVariables, TData, TRawResponse> = $ReadOnly<{
62
+ export type CommitMutationConfig<TVariables, TData, TRawResponse> = Readonly<{
63
63
  cacheConfig?: CacheConfig,
64
64
  configs?: Array<DeclarativeMutationConfig>,
65
65
  mutation: Mutation<TVariables, TData, TRawResponse>,
@@ -78,7 +78,11 @@ export type CommitMutationConfig<TVariables, TData, TRawResponse> = $ReadOnly<{
78
78
  * Higher-level helper function to execute a mutation against a specific
79
79
  * environment.
80
80
  */
81
- function commitMutation<TVariables: Variables, TData, TRawResponse = {...}>(
81
+ function commitMutation<
82
+ TVariables extends Variables,
83
+ TData,
84
+ TRawResponse = {...},
85
+ >(
82
86
  environment: IEnvironment,
83
87
  config: CommitMutationConfig<TVariables, TData, TRawResponse>,
84
88
  ): Disposable {
@@ -122,7 +126,7 @@ function commitMutation<TVariables: Variables, TData, TRawResponse = {...}>(
122
126
  if (configs) {
123
127
  ({optimisticUpdater, updater} = RelayDeclarativeMutationConfig.convert<{
124
128
  variables: TVariables,
125
- /* $FlowFixMe[incompatible-call] error exposed when improving flow typing
129
+ /* $FlowFixMe[incompatible-type] error exposed when improving flow typing
126
130
  * of commitMutation */
127
131
  response: TData,
128
132
  }>(configs, mutation, optimisticUpdater, updater));
@@ -131,7 +135,7 @@ function commitMutation<TVariables: Variables, TData, TRawResponse = {...}>(
131
135
  const subscription = environment
132
136
  .executeMutation<{
133
137
  variables: TVariables,
134
- /* $FlowFixMe[incompatible-call] error exposed when improving flow typing
138
+ /* $FlowFixMe[incompatible-type] error exposed when improving flow typing
135
139
  * of commitMutation */
136
140
  response: TData,
137
141
  }>({
@@ -142,6 +146,17 @@ function commitMutation<TVariables: Variables, TData, TRawResponse = {...}>(
142
146
  uploadables,
143
147
  })
144
148
  .subscribe({
149
+ complete: () => {
150
+ const {onCompleted} = config;
151
+ if (onCompleted) {
152
+ const snapshot = environment.lookup(operation.fragment);
153
+ onCompleted(
154
+ snapshot.data as $FlowFixMe,
155
+ errors.length !== 0 ? errors : null,
156
+ );
157
+ }
158
+ },
159
+ error: onError,
145
160
  next: payload => {
146
161
  if (Array.isArray(payload)) {
147
162
  payload.forEach(item => {
@@ -156,17 +171,6 @@ function commitMutation<TVariables: Variables, TData, TRawResponse = {...}>(
156
171
  }
157
172
  config.onNext?.();
158
173
  },
159
- complete: () => {
160
- const {onCompleted} = config;
161
- if (onCompleted) {
162
- const snapshot = environment.lookup(operation.fragment);
163
- onCompleted(
164
- (snapshot.data: $FlowFixMe),
165
- errors.length !== 0 ? errors : null,
166
- );
167
- }
168
- },
169
- error: onError,
170
174
  unsubscribe: onUnsubscribe,
171
175
  });
172
176
  return {dispose: subscription.unsubscribe};
@@ -27,12 +27,12 @@ const {getArgumentValues} = require('../store/RelayStoreUtils');
27
27
 
28
28
  const nonUpdatableKeys = ['id', '__id', '__typename', 'js'];
29
29
 
30
- function createUpdatableProxy<TData: {...}>(
30
+ function createUpdatableProxy<TData extends {...}>(
31
31
  updatableProxyRootRecord: RecordProxy,
32
32
  variables: Variables,
33
- selections: $ReadOnlyArray<ReaderSelection>,
33
+ selections: ReadonlyArray<ReaderSelection>,
34
34
  recordSourceProxy: RecordSourceProxy,
35
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
35
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
36
36
  ): TData {
37
37
  const mutableUpdatableProxy = {};
38
38
  updateProxyFromSelections(
@@ -49,16 +49,16 @@ function createUpdatableProxy<TData: {...}>(
49
49
  // unless ReaderSelection carries more type information, we will never be able
50
50
  // to flowtype mutableUpdatableProxy without a type assertion.
51
51
  // $FlowFixMe[unclear-type]
52
- return ((mutableUpdatableProxy: any): TData);
52
+ return mutableUpdatableProxy as any as TData;
53
53
  }
54
54
 
55
55
  function updateProxyFromSelections<TData>(
56
56
  mutableUpdatableProxy: TData,
57
57
  updatableProxyRootRecord: RecordProxy,
58
58
  variables: Variables,
59
- selections: $ReadOnlyArray<ReaderSelection>,
59
+ selections: ReadonlyArray<ReaderSelection>,
60
60
  recordSourceProxy: RecordSourceProxy,
61
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
61
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
62
62
  ): void {
63
63
  for (const selection of selections) {
64
64
  switch (selection.kind) {
@@ -108,7 +108,7 @@ function updateProxyFromSelections<TData>(
108
108
  case 'ScalarField':
109
109
  const scalarFieldName = selection.alias ?? selection.name;
110
110
  Object.defineProperty(mutableUpdatableProxy, scalarFieldName, {
111
- get: function () {
111
+ get() {
112
112
  const newVariables = getArgumentValues(
113
113
  selection.args ?? [],
114
114
  variables,
@@ -191,7 +191,7 @@ function updateProxyFromSelections<TData>(
191
191
  'Encountered an unexpected ReaderSelection variant in RelayRecordSourceProxy. This indicates a bug in Relay.',
192
192
  );
193
193
  default:
194
- (selection.kind: empty);
194
+ selection.kind as empty;
195
195
  throw new Error(
196
196
  'Encountered an unexpected ReaderSelection variant in RelayRecordSourceProxy. This indicates a bug in Relay.',
197
197
  );
@@ -205,7 +205,7 @@ function createSetterForPluralLinkedField(
205
205
  updatableProxyRootRecord: RecordProxy,
206
206
  recordSourceProxy: RecordSourceProxy,
207
207
  ) {
208
- return function set(newValue: $ReadOnlyArray<{__id: string, ...}>) {
208
+ return function set(newValue: ReadonlyArray<{__id: string, ...}>) {
209
209
  const newVariables = getArgumentValues(selection.args ?? [], variables);
210
210
  if (newValue == null) {
211
211
  throw new Error(
@@ -276,7 +276,7 @@ function createGetterForPluralLinkedField(
276
276
  variables: Variables,
277
277
  updatableProxyRootRecord: RecordProxy,
278
278
  recordSourceProxy: RecordSourceProxy,
279
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
279
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
280
280
  ): () => $FlowFixMe {
281
281
  return function () {
282
282
  const newVariables = getArgumentValues(selection.args ?? [], variables);
@@ -296,7 +296,7 @@ function createGetterForPluralLinkedField(
296
296
  }
297
297
 
298
298
  if (linkedRecords != null) {
299
- return (linkedRecords.map(linkedRecord => {
299
+ return linkedRecords.map(linkedRecord => {
300
300
  if (linkedRecord != null) {
301
301
  const updatableProxy = {};
302
302
  updateProxyFromSelections(
@@ -313,12 +313,12 @@ function createGetterForPluralLinkedField(
313
313
  // Flow incorrect assumes that the return value for the get method must match
314
314
  // the set parameter.
315
315
  // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
316
- return (updatableProxy: any);
316
+ return updatableProxy as any;
317
317
  } else {
318
318
  return linkedRecord;
319
319
  }
320
320
  // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
321
- }): any);
321
+ }) as any;
322
322
  } else {
323
323
  return linkedRecords;
324
324
  }
@@ -330,7 +330,7 @@ function createGetterForSingularLinkedField(
330
330
  variables: Variables,
331
331
  updatableProxyRootRecord: RecordProxy,
332
332
  recordSourceProxy: RecordSourceProxy,
333
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
333
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
334
334
  ): () => ?$FlowFixMe {
335
335
  return function () {
336
336
  const newVariables = getArgumentValues(selection.args ?? [], variables);
@@ -364,7 +364,7 @@ function createGetterForSingularLinkedField(
364
364
  // Flow incorrect assumes that the return value for the get method must match
365
365
  // the set parameter.
366
366
  // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
367
- return (updatableProxy: any);
367
+ return updatableProxy as any;
368
368
  } else {
369
369
  return linkedRecord;
370
370
  }
@@ -376,7 +376,7 @@ function getLinkedRecordUsingMissingFieldHandlers(
376
376
  newVariables: Variables,
377
377
  updatableProxyRootRecord: RecordProxy,
378
378
  recordSourceProxy: RecordSourceProxy,
379
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
379
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
380
380
  ): ?RecordProxy {
381
381
  for (const handler of missingFieldHandlers) {
382
382
  if (handler.kind === 'linked') {
@@ -398,7 +398,7 @@ function getPluralLinkedRecordUsingMissingFieldHandlers(
398
398
  newVariables: Variables,
399
399
  updatableProxyRootRecord: RecordProxy,
400
400
  recordSourceProxy: RecordSourceProxy,
401
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
401
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
402
402
  ): ?Array<?RecordProxy> {
403
403
  for (const handler of missingFieldHandlers) {
404
404
  if (handler.kind === 'pluralLinked') {
@@ -424,8 +424,8 @@ function getScalarUsingMissingFieldHandlers(
424
424
  newVariables: Variables,
425
425
  updatableProxyRootRecord: RecordProxy,
426
426
  recordSourceProxy: RecordSourceProxy,
427
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
428
- ): mixed {
427
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
428
+ ): unknown {
429
429
  for (const handler of missingFieldHandlers) {
430
430
  if (handler.kind === 'scalar') {
431
431
  const value = handler.handle(
@@ -27,11 +27,11 @@ const {createUpdatableProxy} = require('./createUpdatableProxy');
27
27
  const invariant = require('invariant');
28
28
 
29
29
  // Note: plural fragment references are currently not supported
30
- function readUpdatableFragment<TFragmentType: FragmentType, TData>(
30
+ function readUpdatableFragment<TFragmentType extends FragmentType, TData>(
31
31
  fragment: UpdatableFragment<TFragmentType, TData>,
32
32
  fragmentReference: HasUpdatableSpread<TFragmentType>,
33
33
  proxy: RecordSourceProxy,
34
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
34
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
35
35
  ): UpdatableData<TData> {
36
36
  const updatableFragment = getFragment(fragment);
37
37
  const fragmentVariables = getVariablesFromFragment(
@@ -48,7 +48,7 @@ function readUpdatableFragment<TFragmentType: FragmentType, TData>(
48
48
  );
49
49
 
50
50
  return {
51
- // $FlowFixMe[incompatible-call]
51
+ // $FlowFixMe[incompatible-type]
52
52
  updatableData: createUpdatableProxy<TData>(
53
53
  fragmentRoot,
54
54
  fragmentVariables,
@@ -21,16 +21,16 @@ import type {UpdatableQuery, Variables} from '../util/RelayRuntimeTypes';
21
21
  const {getUpdatableQuery} = require('../query/GraphQLTag');
22
22
  const {createUpdatableProxy} = require('./createUpdatableProxy');
23
23
 
24
- function readUpdatableQuery<TVariables: Variables, TData>(
24
+ function readUpdatableQuery<TVariables extends Variables, TData>(
25
25
  query: UpdatableQuery<TVariables, TData>,
26
26
  variables: TVariables,
27
27
  proxy: RecordSourceProxy,
28
- missingFieldHandlers: $ReadOnlyArray<MissingFieldHandler>,
28
+ missingFieldHandlers: ReadonlyArray<MissingFieldHandler>,
29
29
  ): UpdatableData<TData> {
30
30
  const updatableQuery = getUpdatableQuery(query);
31
31
 
32
32
  return {
33
- // $FlowFixMe[incompatible-call]
33
+ // $FlowFixMe[incompatible-type]
34
34
  updatableData: createUpdatableProxy<TData>(
35
35
  proxy.getRoot(),
36
36
  variables,
@@ -62,12 +62,12 @@ if (__DEV__) {
62
62
  ) => {
63
63
  const operationName = mutation.operation.name;
64
64
  const context: ValidationContext = {
65
- path: 'ROOT',
66
- visitedPaths: new Set(),
67
- variables: variables || {},
68
- missingDiff: {},
69
65
  extraDiff: {},
66
+ missingDiff: {},
70
67
  moduleImportPaths: new Set(),
68
+ path: 'ROOT',
69
+ variables: variables || {},
70
+ visitedPaths: new Set(),
71
71
  };
72
72
  validateSelections(
73
73
  optimisticResponse,
@@ -91,7 +91,7 @@ if (__DEV__) {
91
91
 
92
92
  const validateSelections = (
93
93
  optimisticResponse: Object,
94
- selections: $ReadOnlyArray<NormalizationSelection>,
94
+ selections: ReadonlyArray<NormalizationSelection>,
95
95
  context: ValidationContext,
96
96
  ) => {
97
97
  selections.forEach(selection =>
@@ -156,7 +156,7 @@ if (__DEV__) {
156
156
  return;
157
157
  }
158
158
  default:
159
- (selection: empty);
159
+ selection as empty;
160
160
  return;
161
161
  }
162
162
  };
@@ -261,4 +261,4 @@ if (__DEV__) {
261
261
  };
262
262
  }
263
263
 
264
- module.exports = (validateMutation: (Object, ConcreteRequest, ?Object) => void);
264
+ module.exports = validateMutation as (Object, ConcreteRequest, ?Object) => void;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import {FetchFunction, Network, SubscribeFunction} from './RelayNetworkTypes';
9
+
10
+ export const RelayNetwork: {
11
+ create(fetchFn: FetchFunction, subscribeFn?: SubscribeFunction): Network;
12
+ };
@@ -0,0 +1,145 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import { RequestParameters } from '../util/RelayConcreteNode';
9
+ import {CacheConfig, Disposable, Variables} from '../util/RelayRuntimeTypes';
10
+ import {ObservableFromValue, RelayObservable} from './RelayObservable';
11
+
12
+ /**
13
+ * An interface for fetching the data for one or more (possibly interdependent)
14
+ * queries.
15
+ */
16
+ export interface Network {
17
+ execute: ExecuteFunction;
18
+ }
19
+ export type LogRequestInfoFunction = (arg: any) => void;
20
+
21
+ export interface PayloadData {
22
+ [key: string]: any;
23
+ }
24
+
25
+ export interface PayloadError {
26
+ message: string;
27
+ locations?:
28
+ | Array<{
29
+ line: number;
30
+ column: number;
31
+ }>
32
+ | undefined;
33
+ path?: Array<string | number>;
34
+ severity?: 'CRITICAL' | 'ERROR' | 'WARNING' | undefined; // Not officially part of the spec, but used at Facebook
35
+ }
36
+
37
+ export interface PayloadExtensions {
38
+ [key: string]: any;
39
+ }
40
+
41
+ /**
42
+ * The shape of a GraphQL response as dictated by the
43
+ * [spec](https://graphql.github.io/graphql-spec/June2018/#sec-Response-Format)
44
+ */
45
+ export interface GraphQLResponseWithData {
46
+ data: PayloadData;
47
+ errors?: PayloadError[] | undefined;
48
+ extensions?: PayloadExtensions | undefined;
49
+ label?: string | undefined;
50
+ path?: Array<string | number> | undefined;
51
+ }
52
+ export interface GraphQLResponseWithoutData {
53
+ data?: PayloadData | undefined;
54
+ errors: PayloadError[];
55
+ extensions?: PayloadExtensions | undefined;
56
+ label?: string | undefined;
57
+ path?: Array<string | number> | undefined;
58
+ }
59
+ export interface GraphQLResponseWithExtensionsOnly {
60
+ // Per https://spec.graphql.org/June2018/#sec-Errors
61
+ // > If the data entry in the response is not present, the errors entry
62
+ // > in the response must not be empty. It must contain at least one error
63
+ // This means a payload has to have either a data key or an errors key:
64
+ // but the spec leaves room for the combination of data: null plus extensions
65
+ // since `data: null` is a *required* output if there was an error during
66
+ // execution, but the inverse is not described in the sepc: `data: null`
67
+ // does not necessarily indicate that there was an error.
68
+ data: null;
69
+ extensions: PayloadExtensions;
70
+ }
71
+
72
+ export type GraphQLSingularResponse =
73
+ | GraphQLResponseWithData
74
+ | GraphQLResponseWithExtensionsOnly
75
+ | GraphQLResponseWithoutData;
76
+
77
+ export type GraphQLResponse = GraphQLSingularResponse | readonly GraphQLSingularResponse[];
78
+
79
+ /**
80
+ * A function that returns an Observable representing the response of executing
81
+ * a GraphQL operation.
82
+ */
83
+ export type ExecuteFunction = (
84
+ request: RequestParameters,
85
+ variables: Variables,
86
+ cacheConfig: CacheConfig,
87
+ uploadables?: UploadableMap | null,
88
+ ) => RelayObservable<GraphQLResponse>;
89
+
90
+ /**
91
+ * A function that executes a GraphQL operation with request/response semantics.
92
+ *
93
+ * May return an Observable or Promise of a plain GraphQL server response, or
94
+ * a composed ExecutePayload object supporting additional metadata.
95
+ */
96
+ export type FetchFunction = (
97
+ request: RequestParameters,
98
+ variables: Variables,
99
+ cacheConfig: CacheConfig,
100
+ uploadables?: UploadableMap | null,
101
+ ) => ObservableFromValue<GraphQLResponse>;
102
+
103
+ export interface LegacyObserver<T> {
104
+ onCompleted?: (() => void) | undefined;
105
+ onError?: ((error: Error) => void) | undefined;
106
+ onNext?: ((data: T) => void) | undefined;
107
+ }
108
+
109
+ /**
110
+ * A function that executes a GraphQL subscription operation, returning zero or
111
+ * more raw server responses over time.
112
+ */
113
+ export type SubscribeFunction = (
114
+ request: RequestParameters,
115
+ variables: Variables,
116
+ cacheConfig: CacheConfig,
117
+ observer?: LegacyObserver<GraphQLResponse>,
118
+ ) => RelayObservable<GraphQLResponse> | Disposable;
119
+
120
+ export type Uploadable = File | Blob;
121
+ export interface UploadableMap {
122
+ [key: string]: Uploadable;
123
+ }
124
+
125
+ /**
126
+ * React Flight tree created on the server.
127
+ */
128
+ export type ReactFlightServerTree = any;
129
+ export interface ReactFlightPayloadQuery {
130
+ readonly id: any;
131
+ readonly module: any;
132
+ readonly response: GraphQLSingularResponse;
133
+ readonly variables: Variables;
134
+ }
135
+ /**
136
+ * Data that is returned by a Flight compliant GraphQL server.
137
+ *
138
+ * - tree: an array of values that will be iterated and fed into
139
+ * ReactFlightDOMRelayClient.
140
+ * - queries: an array of queries that the server preloaded for the client.
141
+ */
142
+ export interface ReactFlightPayloadData {
143
+ readonly tree: ReactFlightServerTree[];
144
+ readonly queries: ReactFlightPayloadQuery[];
145
+ }