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.
- package/experimental.d.ts +34 -0
- package/experimental.js +1 -1
- package/experimental.js.flow +11 -11
- package/handlers/RelayDefaultHandlerProvider.d.ts +12 -0
- package/handlers/connection/ConnectionHandler.d.ts +51 -0
- package/handlers/connection/ConnectionHandler.js.flow +5 -5
- package/handlers/connection/ConnectionInterface.d.ts +40 -0
- package/handlers/connection/ConnectionInterface.js.flow +1 -1
- package/handlers/connection/MutationHandlers.d.ts +17 -0
- package/index.d.ts +274 -0
- package/index.js +1 -1
- package/index.js.flow +125 -62
- package/lib/experimental.js +3 -3
- package/lib/index.js +105 -57
- package/lib/multi-actor-environment/ActorIdentifier.js +2 -2
- package/lib/multi-actor-environment/MultiActorEnvironment.js +3 -1
- package/lib/mutations/commitMutation.js +8 -8
- package/lib/mutations/validateMutation.js +4 -4
- package/lib/query/GraphQLTag.js +3 -3
- package/lib/query/fetchQuery.js +15 -3
- package/lib/store/DataChecker.js +38 -4
- package/lib/store/NormalizationEngine.js +373 -0
- package/lib/store/OperationExecutor.js +172 -113
- package/lib/store/RelayConcreteVariables.js +1 -1
- package/lib/store/RelayErrorTrie.js +2 -2
- package/lib/store/RelayExperimentalGraphResponseTransform.js +8 -8
- package/lib/store/RelayModernEnvironment.js +26 -19
- package/lib/store/RelayModernRecord.js +18 -8
- package/lib/store/RelayModernSelector.js +9 -9
- package/lib/store/RelayModernStore.js +152 -43
- package/lib/store/RelayPublishQueue.js +1 -1
- package/lib/store/RelayReader.js +76 -38
- package/lib/store/RelayRecordSource.js +6 -0
- package/lib/store/RelayReferenceMarker.js +2 -1
- package/lib/store/RelayResponseNormalizer.js +88 -55
- package/lib/store/RelayStoreSubscriptions.js +34 -10
- package/lib/store/RelayStoreUtils.js +8 -1
- package/lib/store/ResolverFragments.js +2 -2
- package/lib/store/live-resolvers/LiveResolverCache.js +25 -9
- package/lib/store/observeFragmentExperimental.js +17 -1
- package/lib/store/observeQueryExperimental.js +2 -2
- package/lib/subscription/requestSubscription.js +3 -3
- package/lib/util/RelayError.js +3 -0
- package/lib/util/RelayFeatureFlags.js +6 -2
- package/lib/util/RelayReplaySubject.js +4 -4
- package/lib/util/handlePotentialSnapshotErrors.js +2 -2
- package/lib/util/stableCopy.js +2 -2
- package/llm-docs/api-reference/entrypoint-apis/entrypoint-container.mdx +38 -0
- package/llm-docs/api-reference/entrypoint-apis/load-entrypoint.mdx +77 -0
- package/llm-docs/api-reference/entrypoint-apis/use-entrypoint-loader.mdx +99 -0
- package/llm-docs/api-reference/graphql/graphql-directives.mdx +378 -0
- package/llm-docs/api-reference/hooks/_use-lazy-load-query-extra.mdx +16 -0
- package/llm-docs/api-reference/hooks/load-query.mdx +84 -0
- package/llm-docs/api-reference/hooks/relay-environment-provider.mdx +78 -0
- package/llm-docs/api-reference/hooks/use-client-query.mdx +65 -0
- package/llm-docs/api-reference/hooks/use-fragment.mdx +69 -0
- package/llm-docs/api-reference/hooks/use-lazy-load-query.mdx +62 -0
- package/llm-docs/api-reference/hooks/use-mutation.mdx +94 -0
- package/llm-docs/api-reference/hooks/use-pagination-fragment.mdx +166 -0
- package/llm-docs/api-reference/hooks/use-prefetchable-forward-pagination-fragment.mdx +134 -0
- package/llm-docs/api-reference/hooks/use-preloaded-query.mdx +84 -0
- package/llm-docs/api-reference/hooks/use-query-loader.mdx +95 -0
- package/llm-docs/api-reference/hooks/use-refetchable-fragment.mdx +122 -0
- package/llm-docs/api-reference/hooks/use-relay-environment.mdx +37 -0
- package/llm-docs/api-reference/hooks/use-subscription.mdx +66 -0
- package/llm-docs/api-reference/relay-resolvers/docblock-format.mdx +321 -0
- package/llm-docs/api-reference/relay-resolvers/runtime-functions.mdx +94 -0
- package/llm-docs/api-reference/relay-runtime/commit-mutation.mdx +65 -0
- package/llm-docs/api-reference/relay-runtime/fetch-query.mdx +118 -0
- package/llm-docs/api-reference/relay-runtime/field-logger.mdx +170 -0
- package/llm-docs/api-reference/relay-runtime/observe-fragment.mdx +92 -0
- package/llm-docs/api-reference/relay-runtime/relay-environment.mdx +53 -0
- package/llm-docs/api-reference/relay-runtime/request-subscription.mdx +54 -0
- package/llm-docs/api-reference/relay-runtime/runtime-configuration.mdx +52 -0
- package/llm-docs/api-reference/relay-runtime/store.mdx +734 -0
- package/llm-docs/api-reference/relay-runtime/wait-for-fragment-data.mdx +89 -0
- package/llm-docs/api-reference/types/CacheConfig.mdx +8 -0
- package/llm-docs/api-reference/types/Disposable.mdx +4 -0
- package/llm-docs/api-reference/types/GraphQLSubscriptionConfig.mdx +17 -0
- package/llm-docs/api-reference/types/MutationConfig.mdx +31 -0
- package/llm-docs/api-reference/types/SelectorStoreUpdater.mdx +6 -0
- package/llm-docs/api-reference/types/UploadableMap.mdx +3 -0
- package/llm-docs/community/learning-resources.mdx +64 -0
- package/llm-docs/debugging/declarative-mutation-directives.mdx +34 -0
- package/llm-docs/debugging/disallowed-id-types-error.mdx +43 -0
- package/llm-docs/debugging/inconsistent-typename-error.mdx +47 -0
- package/llm-docs/debugging/relay-devtools.mdx +73 -0
- package/llm-docs/debugging/why-null.mdx +116 -0
- package/llm-docs/editor-support.mdx +55 -0
- package/llm-docs/error-reference/unknown-field.mdx +36 -0
- package/llm-docs/getting-started/babel-plugin.mdx +31 -0
- package/llm-docs/getting-started/compiler-config.mdx +25 -0
- package/llm-docs/getting-started/compiler.mdx +98 -0
- package/llm-docs/getting-started/lint-rules.mdx +87 -0
- package/llm-docs/getting-started/production.mdx +30 -0
- package/llm-docs/getting-started/quick-start.mdx +216 -0
- package/llm-docs/glossary/glossary.mdx +1040 -0
- package/llm-docs/guided-tour/list-data/advanced-pagination.mdx +157 -0
- package/llm-docs/guided-tour/list-data/connections.mdx +81 -0
- package/llm-docs/guided-tour/list-data/pagination.mdx +193 -0
- package/llm-docs/guided-tour/list-data/rendering-connections.mdx +112 -0
- package/llm-docs/guided-tour/list-data/streaming-pagination.mdx +87 -0
- package/llm-docs/guided-tour/managing-data-outside-react/retaining-queries.mdx +51 -0
- package/llm-docs/guided-tour/refetching/refetching-queries-with-different-data.mdx +337 -0
- package/llm-docs/guided-tour/refetching/refreshing-queries.mdx +350 -0
- package/llm-docs/guided-tour/rendering/environment.mdx +59 -0
- package/llm-docs/guided-tour/rendering/error-states.mdx +295 -0
- package/llm-docs/guided-tour/rendering/fragments.mdx +354 -0
- package/llm-docs/guided-tour/rendering/loading-states.mdx +245 -0
- package/llm-docs/guided-tour/rendering/queries.mdx +261 -0
- package/llm-docs/guided-tour/rendering/variables.mdx +233 -0
- package/llm-docs/guided-tour/reusing-cached-data/fetch-policies.mdx +56 -0
- package/llm-docs/guided-tour/reusing-cached-data/filling-in-missing-data.mdx +102 -0
- package/llm-docs/guided-tour/reusing-cached-data/introduction.mdx +22 -0
- package/llm-docs/guided-tour/reusing-cached-data/presence-of-data.mdx +93 -0
- package/llm-docs/guided-tour/reusing-cached-data/rendering-partially-cached-data.mdx +175 -0
- package/llm-docs/guided-tour/reusing-cached-data/staleness-of-data.mdx +116 -0
- package/llm-docs/guided-tour/updating-data/client-only-data.mdx +115 -0
- package/llm-docs/guided-tour/updating-data/graphql-mutations.mdx +334 -0
- package/llm-docs/guided-tour/updating-data/graphql-subscriptions.mdx +279 -0
- package/llm-docs/guided-tour/updating-data/imperatively-modifying-linked-fields.mdx +511 -0
- package/llm-docs/guided-tour/updating-data/imperatively-modifying-store-data-legacy.mdx +142 -0
- package/llm-docs/guided-tour/updating-data/imperatively-modifying-store-data.mdx +275 -0
- package/llm-docs/guided-tour/updating-data/introduction.mdx +25 -0
- package/llm-docs/guided-tour/updating-data/local-data-updates.mdx +71 -0
- package/llm-docs/guided-tour/updating-data/typesafe-updaters-faq.mdx +83 -0
- package/llm-docs/guided-tour/updating-data/updating-connections.mdx +592 -0
- package/llm-docs/guides/alias-directive.mdx +160 -0
- package/llm-docs/guides/catch-directive.mdx +167 -0
- package/llm-docs/guides/client-schema-extensions.mdx +208 -0
- package/llm-docs/guides/codemods.mdx +79 -0
- package/llm-docs/guides/data-driven-dependencies/client-3d.mdx +255 -0
- package/llm-docs/guides/data-driven-dependencies/configuration.mdx +127 -0
- package/llm-docs/guides/data-driven-dependencies/introduction.mdx +39 -0
- package/llm-docs/guides/data-driven-dependencies/server-3d.mdx +664 -0
- package/llm-docs/guides/document-comparison.mdx +106 -0
- package/llm-docs/guides/graphql-server-specification.mdx +453 -0
- package/llm-docs/guides/network-layer.mdx +69 -0
- package/llm-docs/guides/persisted-queries.mdx +328 -0
- package/llm-docs/guides/relay-resolvers/context.mdx +99 -0
- package/llm-docs/guides/relay-resolvers/defining-fields.mdx +151 -0
- package/llm-docs/guides/relay-resolvers/defining-types.mdx +164 -0
- package/llm-docs/guides/relay-resolvers/deprecated.mdx +27 -0
- package/llm-docs/guides/relay-resolvers/derived-fields.mdx +127 -0
- package/llm-docs/guides/relay-resolvers/descriptions.mdx +44 -0
- package/llm-docs/guides/relay-resolvers/enabling.mdx +41 -0
- package/llm-docs/guides/relay-resolvers/errors.mdx +64 -0
- package/llm-docs/guides/relay-resolvers/field-arguments.mdx +63 -0
- package/llm-docs/guides/relay-resolvers/introduction.mdx +62 -0
- package/llm-docs/guides/relay-resolvers/limitations.mdx +30 -0
- package/llm-docs/guides/relay-resolvers/live-fields.mdx +164 -0
- package/llm-docs/guides/relay-resolvers/return-types.mdx +161 -0
- package/llm-docs/guides/relay-resolvers/suspense.mdx +41 -0
- package/llm-docs/guides/required-directive.mdx +240 -0
- package/llm-docs/guides/semantic-nullability.mdx +93 -0
- package/llm-docs/guides/testing-relay-components.mdx +642 -0
- package/llm-docs/guides/testing-relay-with-preloaded-queries.mdx +160 -0
- package/llm-docs/guides/throw-on-field-error-directive.mdx +58 -0
- package/llm-docs/guides/type-emission.mdx +414 -0
- package/llm-docs/home.mdx +32 -0
- package/llm-docs/principles-and-architecture/architecture-overview.mdx +24 -0
- package/llm-docs/principles-and-architecture/compiler-architecture.mdx +106 -0
- package/llm-docs/principles-and-architecture/runtime-architecture.mdx +249 -0
- package/llm-docs/principles-and-architecture/thinking-in-graphql.mdx +309 -0
- package/llm-docs/principles-and-architecture/thinking-in-relay.mdx +104 -0
- package/llm-docs/principles-and-architecture/videos.mdx +50 -0
- package/llm-docs/tutorial/arrays-lists.mdx +126 -0
- package/llm-docs/tutorial/fragments-1.mdx +487 -0
- package/llm-docs/tutorial/graphql.mdx +172 -0
- package/llm-docs/tutorial/interfaces-polymorphism.mdx +161 -0
- package/llm-docs/tutorial/intro.mdx +58 -0
- package/llm-docs/tutorial/mutations-updates.mdx +624 -0
- package/llm-docs/tutorial/organizing-mutations-queries-and-subscriptions.mdx +13 -0
- package/llm-docs/tutorial/queries-1.mdx +267 -0
- package/llm-docs/tutorial/queries-2.mdx +389 -0
- package/llm-docs/tutorial/refetchable-fragments.mdx +352 -0
- package/multi-actor-environment/ActorIdentifier.d.ts +17 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +2 -2
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +15 -15
- package/multi-actor-environment/ActorUtils.js.flow +1 -1
- package/multi-actor-environment/MultiActorEnvironment.d.ts +123 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +32 -24
- package/multi-actor-environment/MultiActorEnvironmentTypes.d.ts +225 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +6 -6
- package/multi-actor-environment/index.d.ts +14 -0
- package/multi-actor-environment.d.ts +8 -0
- package/mutations/RelayDeclarativeMutationConfig.d.ts +70 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +9 -9
- package/mutations/RelayRecordProxy.js.flow +8 -11
- package/mutations/RelayRecordSourceMutator.js.flow +4 -4
- package/mutations/RelayRecordSourceProxy.js.flow +4 -4
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +6 -6
- package/mutations/applyOptimisticMutation.d.ts +25 -0
- package/mutations/applyOptimisticMutation.js.flow +2 -2
- package/mutations/commitLocalUpdate.d.ts +10 -0
- package/mutations/commitMutation.d.ts +48 -0
- package/mutations/commitMutation.js.flow +21 -17
- package/mutations/createUpdatableProxy.js.flow +19 -19
- package/mutations/readUpdatableFragment.js.flow +3 -3
- package/mutations/readUpdatableQuery.js.flow +3 -3
- package/mutations/validateMutation.js.flow +7 -7
- package/network/RelayNetwork.d.ts +12 -0
- package/network/RelayNetworkTypes.d.ts +145 -0
- package/network/RelayNetworkTypes.js.flow +18 -18
- package/network/RelayObservable.d.ts +197 -0
- package/network/RelayObservable.js.flow +32 -30
- package/network/RelayQueryResponseCache.d.ts +16 -0
- package/network/RelayQueryResponseCache.js.flow +3 -3
- package/network/wrapNetworkWithLogObserver.js.flow +1 -1
- package/package.json +2 -1
- package/query/GraphQLTag.d.ts +45 -0
- package/query/GraphQLTag.js.flow +22 -10
- package/query/fetchQuery.d.ts +21 -0
- package/query/fetchQuery.js.flow +23 -10
- package/query/fetchQueryInternal.d.ts +26 -0
- package/query/fetchQueryInternal.js.flow +4 -4
- package/query/fetchQuery_DEPRECATED.d.ts +17 -0
- package/query/fetchQuery_DEPRECATED.js.flow +1 -1
- package/store/ClientID.d.ts +14 -0
- package/store/DataChecker.js.flow +51 -15
- package/store/NormalizationEngine.js.flow +782 -0
- package/store/OperationExecutor.d.ts +51 -0
- package/store/OperationExecutor.js.flow +204 -98
- package/store/RelayConcreteVariables.js.flow +5 -5
- package/store/RelayErrorTrie.js.flow +12 -12
- package/store/RelayExperimentalGraphResponseHandler.js.flow +3 -3
- package/store/RelayExperimentalGraphResponseTransform.js.flow +10 -10
- package/store/RelayModernEnvironment.d.ts +97 -0
- package/store/RelayModernEnvironment.js.flow +58 -43
- package/store/RelayModernFragmentSpecResolver.js.flow +1 -1
- package/store/RelayModernOperationDescriptor.d.ts +28 -0
- package/store/RelayModernOperationDescriptor.js.flow +1 -1
- package/store/RelayModernRecord.d.ts +92 -0
- package/store/RelayModernRecord.js.flow +44 -20
- package/store/RelayModernSelector.d.ts +123 -0
- package/store/RelayModernSelector.js.flow +21 -21
- package/store/RelayModernStore.d.ts +57 -0
- package/store/RelayModernStore.js.flow +219 -58
- package/store/RelayOperationTracker.d.ts +29 -0
- package/store/RelayOperationTracker.js.flow +2 -2
- package/store/RelayOptimisticRecordSource.js.flow +2 -2
- package/store/RelayPublishQueue.js.flow +29 -20
- package/store/RelayReader.js.flow +129 -57
- package/store/RelayRecordSource.d.ts +26 -0
- package/store/RelayRecordSource.js.flow +10 -0
- package/store/RelayRecordState.d.ts +28 -0
- package/store/RelayRecordState.js.flow +1 -1
- package/store/RelayReferenceMarker.js.flow +5 -4
- package/store/RelayResponseNormalizer.d.ts +28 -0
- package/store/RelayResponseNormalizer.js.flow +130 -62
- package/store/RelayStoreSubscriptions.js.flow +52 -8
- package/store/RelayStoreTypes.d.ts +1327 -0
- package/store/RelayStoreTypes.js.flow +371 -278
- package/store/RelayStoreUtils.d.ts +86 -0
- package/store/RelayStoreUtils.js.flow +16 -8
- package/store/ResolverCache.js.flow +2 -2
- package/store/ResolverFragments.d.ts +43 -0
- package/store/ResolverFragments.js.flow +22 -14
- package/store/StoreInspector.js.flow +7 -8
- package/store/ViewerPattern.d.ts +11 -0
- package/store/cloneRelayHandleSourceField.js.flow +1 -1
- package/store/cloneRelayScalarHandleSourceField.js.flow +1 -1
- package/store/createFragmentSpecResolver.d.ts +16 -0
- package/store/createRelayContext.js.flow +1 -1
- package/store/createRelayLoggingContext.js.flow +4 -4
- package/store/defaultGetDataID.js.flow +2 -2
- package/store/isRelayModernEnvironment.d.ts +8 -0
- package/store/isRelayModernEnvironment.js.flow +4 -2
- package/store/live-resolvers/LiveResolverCache.js.flow +55 -20
- package/store/live-resolvers/LiveResolverSuspenseSentinel.js.flow +3 -3
- package/store/live-resolvers/getOutputTypeRecordIDs.js.flow +1 -1
- package/store/live-resolvers/isLiveStateValue.js.flow +2 -2
- package/store/live-resolvers/resolverDataInjector.d.ts +27 -0
- package/store/live-resolvers/resolverDataInjector.js.flow +8 -5
- package/store/observeFragmentExperimental.d.ts +46 -0
- package/store/observeFragmentExperimental.js.flow +50 -21
- package/store/observeQueryExperimental.d.ts +30 -0
- package/store/observeQueryExperimental.js.flow +5 -5
- package/store/readInlineData.d.ts +19 -0
- package/store/readInlineData.js.flow +5 -5
- package/store/waitForFragmentExperimental.d.ts +49 -0
- package/store/waitForFragmentExperimental.js.flow +3 -3
- package/subscription/requestSubscription.d.ts +27 -0
- package/subscription/requestSubscription.js.flow +10 -10
- package/util/JSResourceTypes.flow.js.flow +4 -4
- package/util/NormalizationNode.d.ts +235 -0
- package/util/NormalizationNode.js.flow +127 -123
- package/util/ReaderNode.d.ts +264 -0
- package/util/ReaderNode.js.flow +156 -151
- package/util/RelayConcreteNode.d.ts +120 -0
- package/util/RelayConcreteNode.js.flow +32 -32
- package/util/RelayError.d.ts +13 -0
- package/util/RelayError.js.flow +4 -1
- package/util/RelayFeatureFlags.d.ts +40 -0
- package/util/RelayFeatureFlags.js.flow +21 -1
- package/util/RelayProfiler.d.ts +121 -0
- package/util/RelayProfiler.js.flow +1 -1
- package/util/RelayReplaySubject.d.ts +25 -0
- package/util/RelayReplaySubject.js.flow +3 -3
- package/util/RelayRuntimeTypes.d.ts +59 -0
- package/util/RelayRuntimeTypes.js.flow +36 -33
- package/util/createPayloadFor3DField.d.ts +17 -0
- package/util/createPayloadFor3DField.js.flow +9 -5
- package/util/deepFreeze.d.ts +8 -0
- package/util/deepFreeze.js.flow +2 -2
- package/util/getFragmentIdentifier.d.ts +10 -0
- package/util/getFragmentIdentifier.js.flow +1 -1
- package/util/getPaginationMetadata.d.ts +20 -0
- package/util/getPaginationMetadata.js.flow +1 -1
- package/util/getPaginationVariables.d.ts +20 -0
- package/util/getPaginationVariables.js.flow +1 -1
- package/util/getPendingOperationsForFragment.d.ts +18 -0
- package/util/getPendingOperationsForFragment.js.flow +2 -2
- package/util/getRefetchMetadata.d.ts +19 -0
- package/util/getRefetchMetadata.js.flow +6 -5
- package/util/getRelayHandleKey.d.ts +8 -0
- package/util/getRequestIdentifier.d.ts +17 -0
- package/util/getValueAtPath.d.ts +8 -0
- package/util/getValueAtPath.js.flow +3 -3
- package/util/handlePotentialSnapshotErrors.d.ts +14 -0
- package/util/handlePotentialSnapshotErrors.js.flow +5 -5
- package/util/isEmptyObject.js.flow +1 -1
- package/util/isPromise.d.ts +8 -0
- package/util/isPromise.js.flow +2 -2
- package/util/isScalarAndEqual.d.ts +8 -0
- package/util/isScalarAndEqual.js.flow +1 -1
- package/util/recycleNodesInto.d.ts +8 -0
- package/util/recycleNodesInto.js.flow +2 -2
- package/util/registerEnvironmentWithDevTools.js.flow +1 -1
- package/util/shallowFreeze.js.flow +1 -1
- package/util/stableCopy.d.ts +8 -0
- package/util/stableCopy.js.flow +5 -5
- package/util/withProvidedVariables.d.ts +19 -0
- package/util/withProvidedVariables.js.flow +14 -10
package/lib/store/RelayReader.js
CHANGED
|
@@ -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
|
-
|
|
148
|
-
|
|
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.
|
|
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
|
-
|
|
277
|
-
|
|
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
|
-
|
|
456
|
-
|
|
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
|
-
|
|
463
|
-
|
|
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
|
-
|
|
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
|
-
|
|
634
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
160
|
-
var
|
|
161
|
-
var
|
|
162
|
-
var
|
|
163
|
-
var
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
this._recordSource.set(
|
|
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(
|
|
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
|
-
|
|
182
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
264
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
456
|
-
|
|
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
|
|
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) ===
|
|
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),
|
|
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) {
|