relay-runtime 11.0.2 → 13.0.0-rc.2

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 (219) hide show
  1. package/README.md +67 -0
  2. package/handlers/RelayDefaultHandlerProvider.js.flow +3 -3
  3. package/handlers/connection/ConnectionHandler.js.flow +9 -18
  4. package/handlers/connection/ConnectionInterface.js.flow +1 -1
  5. package/handlers/connection/MutationHandlers.js.flow +8 -12
  6. package/index.js +1 -1
  7. package/index.js.flow +57 -35
  8. package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
  9. package/lib/handlers/connection/ConnectionHandler.js +13 -19
  10. package/lib/handlers/connection/ConnectionInterface.js +1 -1
  11. package/lib/handlers/connection/MutationHandlers.js +4 -7
  12. package/lib/index.js +59 -44
  13. package/lib/multi-actor-environment/ActorIdentifier.js +12 -2
  14. package/lib/multi-actor-environment/ActorSpecificEnvironment.js +64 -20
  15. package/lib/multi-actor-environment/ActorUtils.js +27 -0
  16. package/lib/multi-actor-environment/MultiActorEnvironment.js +324 -61
  17. package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +1 -1
  18. package/lib/multi-actor-environment/index.js +6 -2
  19. package/lib/mutations/RelayDeclarativeMutationConfig.js +5 -2
  20. package/lib/mutations/RelayRecordProxy.js +4 -3
  21. package/lib/mutations/RelayRecordSourceMutator.js +4 -3
  22. package/lib/mutations/RelayRecordSourceProxy.js +13 -5
  23. package/lib/mutations/RelayRecordSourceSelectorProxy.js +19 -6
  24. package/lib/mutations/applyOptimisticMutation.js +7 -7
  25. package/lib/mutations/commitLocalUpdate.js +1 -1
  26. package/lib/mutations/commitMutation.js +15 -11
  27. package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +242 -0
  28. package/lib/mutations/validateMutation.js +11 -6
  29. package/lib/network/ConvertToExecuteFunction.js +3 -2
  30. package/lib/network/RelayNetwork.js +4 -3
  31. package/lib/network/RelayNetworkTypes.js +1 -1
  32. package/lib/network/RelayObservable.js +1 -1
  33. package/lib/network/RelayQueryResponseCache.js +22 -6
  34. package/lib/network/wrapNetworkWithLogObserver.js +79 -0
  35. package/lib/query/GraphQLTag.js +3 -2
  36. package/lib/query/PreloadableQueryRegistry.js +1 -1
  37. package/lib/query/fetchQuery.js +7 -6
  38. package/lib/query/fetchQueryInternal.js +1 -1
  39. package/lib/query/fetchQuery_DEPRECATED.js +3 -2
  40. package/lib/store/ClientID.js +8 -2
  41. package/lib/store/DataChecker.js +124 -55
  42. package/lib/store/OperationExecutor.js +489 -215
  43. package/lib/store/RelayConcreteVariables.js +27 -9
  44. package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
  45. package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
  46. package/lib/store/RelayModernEnvironment.js +100 -120
  47. package/lib/store/RelayModernFragmentSpecResolver.js +53 -27
  48. package/lib/store/RelayModernOperationDescriptor.js +3 -2
  49. package/lib/store/RelayModernRecord.js +48 -13
  50. package/lib/store/RelayModernSelector.js +15 -9
  51. package/lib/store/RelayModernStore.js +56 -23
  52. package/lib/store/RelayOperationTracker.js +34 -24
  53. package/lib/store/RelayOptimisticRecordSource.js +1 -1
  54. package/lib/store/RelayPublishQueue.js +35 -11
  55. package/lib/store/RelayReader.js +257 -72
  56. package/lib/store/RelayRecordSource.js +88 -4
  57. package/lib/store/RelayRecordState.js +1 -1
  58. package/lib/store/RelayReferenceMarker.js +34 -22
  59. package/lib/store/RelayResponseNormalizer.js +172 -96
  60. package/lib/store/RelayStoreReactFlightUtils.js +5 -11
  61. package/lib/store/RelayStoreSubscriptions.js +15 -10
  62. package/lib/store/RelayStoreTypes.js +1 -1
  63. package/lib/store/RelayStoreUtils.js +13 -8
  64. package/lib/store/ResolverCache.js +213 -0
  65. package/lib/store/ResolverFragments.js +10 -6
  66. package/lib/store/StoreInspector.js +1 -1
  67. package/lib/store/TypeID.js +1 -1
  68. package/lib/store/ViewerPattern.js +1 -1
  69. package/lib/store/cloneRelayHandleSourceField.js +6 -5
  70. package/lib/store/cloneRelayScalarHandleSourceField.js +6 -5
  71. package/lib/store/createFragmentSpecResolver.js +1 -1
  72. package/lib/store/createRelayContext.js +5 -3
  73. package/lib/store/defaultGetDataID.js +1 -1
  74. package/lib/store/defaultRequiredFieldLogger.js +1 -1
  75. package/lib/store/hasOverlappingIDs.js +1 -1
  76. package/lib/store/isRelayModernEnvironment.js +1 -1
  77. package/lib/store/normalizeRelayPayload.js +1 -1
  78. package/lib/store/readInlineData.js +7 -3
  79. package/lib/subscription/requestSubscription.js +32 -34
  80. package/lib/util/JSResourceTypes.flow.js +1 -1
  81. package/lib/util/NormalizationNode.js +1 -1
  82. package/lib/util/ReaderNode.js +1 -1
  83. package/lib/util/RelayConcreteNode.js +3 -1
  84. package/lib/util/RelayDefaultHandleKey.js +1 -1
  85. package/lib/util/RelayError.js +1 -1
  86. package/lib/util/RelayFeatureFlags.js +10 -7
  87. package/lib/util/RelayProfiler.js +1 -1
  88. package/lib/util/RelayReplaySubject.js +22 -7
  89. package/lib/util/RelayRuntimeTypes.js +1 -7
  90. package/lib/util/StringInterner.js +71 -0
  91. package/lib/util/createPayloadFor3DField.js +1 -1
  92. package/lib/util/deepFreeze.js +1 -1
  93. package/lib/util/generateID.js +1 -1
  94. package/lib/util/getAllRootVariables.js +29 -0
  95. package/lib/util/getFragmentIdentifier.js +16 -8
  96. package/lib/util/getOperation.js +3 -2
  97. package/lib/util/getPaginationMetadata.js +41 -0
  98. package/lib/util/getPaginationVariables.js +66 -0
  99. package/lib/util/getPendingOperationsForFragment.js +55 -0
  100. package/lib/util/getRefetchMetadata.js +36 -0
  101. package/lib/util/getRelayHandleKey.js +3 -3
  102. package/lib/util/getRequestIdentifier.js +3 -3
  103. package/lib/util/getValueAtPath.js +51 -0
  104. package/lib/util/isEmptyObject.js +2 -2
  105. package/lib/util/isPromise.js +1 -1
  106. package/lib/util/isScalarAndEqual.js +1 -1
  107. package/lib/util/recycleNodesInto.js +1 -1
  108. package/lib/util/registerEnvironmentWithDevTools.js +26 -0
  109. package/lib/util/reportMissingRequiredFields.js +1 -1
  110. package/lib/util/resolveImmediate.js +1 -1
  111. package/lib/util/stableCopy.js +1 -1
  112. package/lib/util/withDuration.js +31 -0
  113. package/multi-actor-environment/ActorIdentifier.js.flow +18 -2
  114. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +94 -58
  115. package/multi-actor-environment/ActorUtils.js.flow +33 -0
  116. package/multi-actor-environment/MultiActorEnvironment.js.flow +366 -93
  117. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +88 -23
  118. package/multi-actor-environment/index.js.flow +3 -1
  119. package/mutations/RelayDeclarativeMutationConfig.js.flow +33 -27
  120. package/mutations/RelayRecordProxy.js.flow +5 -6
  121. package/mutations/RelayRecordSourceMutator.js.flow +5 -7
  122. package/mutations/RelayRecordSourceProxy.js.flow +20 -11
  123. package/mutations/RelayRecordSourceSelectorProxy.js.flow +23 -8
  124. package/mutations/applyOptimisticMutation.js.flow +14 -15
  125. package/mutations/commitLocalUpdate.js.flow +2 -2
  126. package/mutations/commitMutation.js.flow +36 -47
  127. package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +318 -0
  128. package/mutations/validateMutation.js.flow +27 -17
  129. package/network/ConvertToExecuteFunction.js.flow +3 -3
  130. package/network/RelayNetwork.js.flow +5 -6
  131. package/network/RelayNetworkTypes.js.flow +1 -1
  132. package/network/RelayObservable.js.flow +2 -2
  133. package/network/RelayQueryResponseCache.js.flow +35 -22
  134. package/network/wrapNetworkWithLogObserver.js.flow +99 -0
  135. package/package.json +2 -2
  136. package/query/GraphQLTag.js.flow +11 -11
  137. package/query/PreloadableQueryRegistry.js.flow +5 -3
  138. package/query/fetchQuery.js.flow +19 -19
  139. package/query/fetchQueryInternal.js.flow +7 -10
  140. package/query/fetchQuery_DEPRECATED.js.flow +7 -7
  141. package/relay-runtime.js +2 -2
  142. package/relay-runtime.min.js +2 -2
  143. package/store/ClientID.js.flow +15 -4
  144. package/store/DataChecker.js.flow +142 -60
  145. package/store/OperationExecutor.js.flow +575 -320
  146. package/store/RelayConcreteVariables.js.flow +28 -9
  147. package/store/RelayExperimentalGraphResponseHandler.js.flow +121 -0
  148. package/store/RelayExperimentalGraphResponseTransform.js.flow +470 -0
  149. package/store/RelayModernEnvironment.js.flow +91 -115
  150. package/store/RelayModernFragmentSpecResolver.js.flow +56 -32
  151. package/store/RelayModernOperationDescriptor.js.flow +13 -8
  152. package/store/RelayModernRecord.js.flow +68 -12
  153. package/store/RelayModernSelector.js.flow +25 -15
  154. package/store/RelayModernStore.js.flow +67 -32
  155. package/store/RelayOperationTracker.js.flow +60 -44
  156. package/store/RelayOptimisticRecordSource.js.flow +3 -3
  157. package/store/RelayPublishQueue.js.flow +74 -32
  158. package/store/RelayReader.js.flow +319 -100
  159. package/store/RelayRecordSource.js.flow +73 -7
  160. package/store/RelayRecordState.js.flow +1 -1
  161. package/store/RelayReferenceMarker.js.flow +41 -27
  162. package/store/RelayResponseNormalizer.js.flow +204 -86
  163. package/store/RelayStoreReactFlightUtils.js.flow +5 -12
  164. package/store/RelayStoreSubscriptions.js.flow +20 -12
  165. package/store/RelayStoreTypes.js.flow +200 -41
  166. package/store/RelayStoreUtils.js.flow +25 -12
  167. package/store/ResolverCache.js.flow +249 -0
  168. package/store/ResolverFragments.js.flow +16 -20
  169. package/store/StoreInspector.js.flow +3 -3
  170. package/store/TypeID.js.flow +2 -2
  171. package/store/ViewerPattern.js.flow +3 -3
  172. package/store/cloneRelayHandleSourceField.js.flow +6 -7
  173. package/store/cloneRelayScalarHandleSourceField.js.flow +6 -7
  174. package/store/createFragmentSpecResolver.js.flow +4 -5
  175. package/store/createRelayContext.js.flow +4 -4
  176. package/store/defaultGetDataID.js.flow +1 -1
  177. package/store/defaultRequiredFieldLogger.js.flow +1 -1
  178. package/store/hasOverlappingIDs.js.flow +1 -1
  179. package/store/isRelayModernEnvironment.js.flow +1 -1
  180. package/store/normalizeRelayPayload.js.flow +7 -8
  181. package/store/readInlineData.js.flow +8 -9
  182. package/subscription/requestSubscription.js.flow +55 -51
  183. package/util/JSResourceTypes.flow.js.flow +1 -1
  184. package/util/NormalizationNode.js.flow +11 -4
  185. package/util/ReaderNode.js.flow +25 -2
  186. package/util/RelayConcreteNode.js.flow +5 -1
  187. package/util/RelayDefaultHandleKey.js.flow +1 -1
  188. package/util/RelayError.js.flow +1 -1
  189. package/util/RelayFeatureFlags.js.flow +23 -15
  190. package/util/RelayProfiler.js.flow +1 -1
  191. package/util/RelayReplaySubject.js.flow +10 -10
  192. package/util/RelayRuntimeTypes.js.flow +70 -3
  193. package/util/StringInterner.js.flow +69 -0
  194. package/util/createPayloadFor3DField.js.flow +4 -4
  195. package/util/deepFreeze.js.flow +1 -1
  196. package/util/generateID.js.flow +1 -1
  197. package/util/getAllRootVariables.js.flow +36 -0
  198. package/util/getFragmentIdentifier.js.flow +28 -16
  199. package/util/getOperation.js.flow +3 -3
  200. package/util/getPaginationMetadata.js.flow +69 -0
  201. package/util/getPaginationVariables.js.flow +108 -0
  202. package/util/getPendingOperationsForFragment.js.flow +62 -0
  203. package/util/getRefetchMetadata.js.flow +76 -0
  204. package/util/getRelayHandleKey.js.flow +2 -3
  205. package/util/getRequestIdentifier.js.flow +4 -4
  206. package/util/getValueAtPath.js.flow +46 -0
  207. package/util/isEmptyObject.js.flow +2 -1
  208. package/util/isPromise.js.flow +1 -1
  209. package/util/isScalarAndEqual.js.flow +1 -1
  210. package/util/recycleNodesInto.js.flow +1 -1
  211. package/util/registerEnvironmentWithDevTools.js.flow +33 -0
  212. package/util/reportMissingRequiredFields.js.flow +1 -1
  213. package/util/resolveImmediate.js.flow +2 -2
  214. package/util/stableCopy.js.flow +1 -1
  215. package/util/withDuration.js.flow +32 -0
  216. package/lib/store/RelayRecordSourceMapImpl.js +0 -107
  217. package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
  218. package/store/RelayRecordSourceMapImpl.js.flow +0 -91
  219. package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -17,18 +17,17 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
17
17
 
18
18
  var RelayObservable = require('../network/RelayObservable');
19
19
 
20
- var fetchQueryInternal = require('./fetchQueryInternal');
21
-
22
- var invariant = require('invariant');
20
+ var _require = require('../store/RelayModernOperationDescriptor'),
21
+ createOperationDescriptor = _require.createOperationDescriptor;
23
22
 
24
23
  var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
25
24
 
26
- var _require = require('../store/RelayModernOperationDescriptor'),
27
- createOperationDescriptor = _require.createOperationDescriptor;
25
+ var fetchQueryInternal = require('./fetchQueryInternal');
28
26
 
29
27
  var _require2 = require('./GraphQLTag'),
30
28
  getRequest = _require2.getRequest;
31
29
 
30
+ var invariant = require('invariant');
32
31
  /**
33
32
  * Fetches the given query and variables on the provided environment,
34
33
  * and de-dupes identical in-flight requests.
@@ -106,6 +105,8 @@ var _require2 = require('./GraphQLTag'),
106
105
  * ```
107
106
  * NOTE: When using .toPromise(), the request cannot be cancelled.
108
107
  */
108
+
109
+
109
110
  function fetchQuery(environment, query, variables, options) {
110
111
  var _options$fetchPolicy;
111
112
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -15,12 +15,13 @@ var _require = require('../store/RelayModernOperationDescriptor'),
15
15
 
16
16
  var _require2 = require('./GraphQLTag'),
17
17
  getRequest = _require2.getRequest;
18
-
19
18
  /**
20
19
  * A helper function to fetch the results of a query. Note that results for
21
20
  * fragment spreads are masked: fields must be explicitly listed in the query in
22
21
  * order to be accessible in the result object.
23
22
  */
23
+
24
+
24
25
  function fetchQuery_DEPRECATED(environment, taggedNode, variables, cacheConfig) {
25
26
  var query = getRequest(taggedNode);
26
27
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -10,10 +10,16 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
14
+
15
+ var _require = require('../util/StringInterner'),
16
+ intern = _require.intern;
17
+
13
18
  var PREFIX = 'client:';
14
19
 
15
20
  function generateClientID(id, storageKey, index) {
16
- var key = id + ':' + storageKey;
21
+ var internedId = RelayFeatureFlags.STRING_INTERN_LEVEL <= 0 ? id : intern(id, RelayFeatureFlags.MAX_DATA_ID_LENGTH);
22
+ var key = internedId + ':' + storageKey;
17
23
 
18
24
  if (index != null) {
19
25
  key += ':' + index;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -15,39 +15,43 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
15
15
 
16
16
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
17
17
 
18
- var RelayConcreteNode = require('../util/RelayConcreteNode');
19
-
20
- var RelayFeatureFlags = require('../util/RelayFeatureFlags');
21
-
22
- var RelayModernRecord = require('./RelayModernRecord');
23
-
24
18
  var RelayRecordSourceMutator = require('../mutations/RelayRecordSourceMutator');
25
19
 
26
20
  var RelayRecordSourceProxy = require('../mutations/RelayRecordSourceProxy');
27
21
 
28
- var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
22
+ var getOperation = require('../util/getOperation');
29
23
 
30
- var RelayStoreUtils = require('./RelayStoreUtils');
24
+ var RelayConcreteNode = require('../util/RelayConcreteNode');
25
+
26
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
27
+
28
+ var _require = require('./ClientID'),
29
+ isClientID = _require.isClientID;
31
30
 
32
31
  var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
33
32
 
34
33
  var cloneRelayScalarHandleSourceField = require('./cloneRelayScalarHandleSourceField');
35
34
 
36
- var getOperation = require('../util/getOperation');
35
+ var _require2 = require('./RelayConcreteVariables'),
36
+ getLocalVariables = _require2.getLocalVariables;
37
37
 
38
- var invariant = require('invariant');
38
+ var RelayModernRecord = require('./RelayModernRecord');
39
39
 
40
- var _require = require('./ClientID'),
41
- isClientID = _require.isClientID;
40
+ var _require3 = require('./RelayRecordState'),
41
+ EXISTENT = _require3.EXISTENT,
42
+ UNKNOWN = _require3.UNKNOWN;
42
43
 
43
- var _require2 = require('./RelayRecordState'),
44
- EXISTENT = _require2.EXISTENT,
45
- UNKNOWN = _require2.UNKNOWN;
44
+ var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
45
+
46
+ var RelayStoreUtils = require('./RelayStoreUtils');
46
47
 
47
- var _require3 = require('./TypeID'),
48
- generateTypeID = _require3.generateTypeID;
48
+ var _require4 = require('./TypeID'),
49
+ generateTypeID = _require4.generateTypeID;
49
50
 
50
- var CONDITION = RelayConcreteNode.CONDITION,
51
+ var invariant = require('invariant');
52
+
53
+ var ACTOR_CHANGE = RelayConcreteNode.ACTOR_CHANGE,
54
+ CONDITION = RelayConcreteNode.CONDITION,
51
55
  CLIENT_COMPONENT = RelayConcreteNode.CLIENT_COMPONENT,
52
56
  CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
53
57
  DEFER = RelayConcreteNode.DEFER,
@@ -76,11 +80,11 @@ var ROOT_ID = RelayStoreUtils.ROOT_ID,
76
80
  * If all records are present, returns `true`, otherwise `false`.
77
81
  */
78
82
 
79
- function check(source, target, selector, handlers, operationLoader, getDataID, shouldProcessClientComponents) {
83
+ function check(getSourceForActor, getTargetForActor, defaultActorIdentifier, selector, handlers, operationLoader, getDataID, shouldProcessClientComponents) {
80
84
  var dataID = selector.dataID,
81
85
  node = selector.node,
82
86
  variables = selector.variables;
83
- var checker = new DataChecker(source, target, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents);
87
+ var checker = new DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents);
84
88
  return checker.check(node, dataID);
85
89
  }
86
90
  /**
@@ -89,21 +93,45 @@ function check(source, target, selector, handlers, operationLoader, getDataID, s
89
93
 
90
94
 
91
95
  var DataChecker = /*#__PURE__*/function () {
92
- function DataChecker(source, target, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents) {
93
- var mutator = new RelayRecordSourceMutator(source, target);
96
+ function DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents) {
97
+ this._getSourceForActor = getSourceForActor;
98
+ this._getTargetForActor = getTargetForActor;
99
+ this._getDataID = getDataID;
100
+ this._source = getSourceForActor(defaultActorIdentifier);
101
+ this._mutatorRecordSourceProxyCache = new Map();
102
+
103
+ var _this$_getMutatorAndR = this._getMutatorAndRecordProxyForActor(defaultActorIdentifier),
104
+ mutator = _this$_getMutatorAndR[0],
105
+ recordSourceProxy = _this$_getMutatorAndR[1];
106
+
94
107
  this._mostRecentlyInvalidatedAt = null;
95
108
  this._handlers = handlers;
96
109
  this._mutator = mutator;
97
110
  this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
98
- this._recordSourceProxy = new RelayRecordSourceProxy(mutator, getDataID);
111
+ this._recordSourceProxy = recordSourceProxy;
99
112
  this._recordWasMissing = false;
100
- this._source = source;
101
113
  this._variables = variables;
102
114
  this._shouldProcessClientComponents = shouldProcessClientComponents;
103
115
  }
104
116
 
105
117
  var _proto = DataChecker.prototype;
106
118
 
119
+ _proto._getMutatorAndRecordProxyForActor = function _getMutatorAndRecordProxyForActor(actorIdentifier) {
120
+ var tuple = this._mutatorRecordSourceProxyCache.get(actorIdentifier);
121
+
122
+ if (tuple == null) {
123
+ var target = this._getTargetForActor(actorIdentifier);
124
+
125
+ var mutator = new RelayRecordSourceMutator(this._getSourceForActor(actorIdentifier), target);
126
+ var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID);
127
+ tuple = [mutator, recordSourceProxy];
128
+
129
+ this._mutatorRecordSourceProxyCache.set(actorIdentifier, tuple);
130
+ }
131
+
132
+ return tuple;
133
+ };
134
+
107
135
  _proto.check = function check(node, dataID) {
108
136
  this._traverse(node, dataID);
109
137
 
@@ -117,8 +145,7 @@ var DataChecker = /*#__PURE__*/function () {
117
145
  };
118
146
 
119
147
  _proto._getVariableValue = function _getVariableValue(name) {
120
- !this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayAsyncLoader(): Undefined variable `%s`.', name) : invariant(false) : void 0; // $FlowFixMe[cannot-write]
121
-
148
+ !this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayAsyncLoader(): Undefined variable `%s`.', name) : invariant(false) : void 0;
122
149
  return this._variables[name];
123
150
  };
124
151
 
@@ -128,6 +155,8 @@ var DataChecker = /*#__PURE__*/function () {
128
155
 
129
156
  _proto._getDataForHandlers = function _getDataForHandlers(field, dataID) {
130
157
  return {
158
+ /* $FlowFixMe[class-object-subtyping] added when improving typing for
159
+ * this parameters */
131
160
  args: field.args ? getArgumentValues(field.args, this._variables) : {},
132
161
  // Getting a snapshot of the record state is potentially expensive since
133
162
  // we will need to merge the sink and source records. Since we do not create
@@ -279,8 +308,13 @@ var DataChecker = /*#__PURE__*/function () {
279
308
 
280
309
  break;
281
310
 
311
+ case ACTOR_CHANGE:
312
+ _this2._checkActorChange(selection.linkedField, dataID);
313
+
314
+ break;
315
+
282
316
  case CONDITION:
283
- var conditionValue = _this2._getVariableValue(selection.condition);
317
+ var conditionValue = Boolean(_this2._getVariableValue(selection.condition));
284
318
 
285
319
  if (conditionValue === selection.passingValue) {
286
320
  _this2._traverseSelections(selection.selections, dataID);
@@ -290,16 +324,16 @@ var DataChecker = /*#__PURE__*/function () {
290
324
 
291
325
  case INLINE_FRAGMENT:
292
326
  {
293
- var abstractKey = selection.abstractKey;
327
+ var _abstractKey = selection.abstractKey;
294
328
 
295
- if (abstractKey == null) {
329
+ if (_abstractKey == null) {
296
330
  // concrete type refinement: only check data if the type exactly matches
297
331
  var typeName = _this2._mutator.getType(dataID);
298
332
 
299
333
  if (typeName === selection.type) {
300
334
  _this2._traverseSelections(selection.selections, dataID);
301
335
  }
302
- } else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
336
+ } else {
303
337
  // Abstract refinement: check data depending on whether the type
304
338
  // conforms to the interface/union or not:
305
339
  // - Type known to _not_ implement the interface: don't check the selections.
@@ -307,25 +341,22 @@ var DataChecker = /*#__PURE__*/function () {
307
341
  // - Unknown whether the type implements the interface: don't check the selections
308
342
  // and treat the data as missing; we do this because the Relay Compiler
309
343
  // guarantees that the type discriminator will always be fetched.
310
- var recordType = _this2._mutator.getType(dataID);
344
+ var _recordType = _this2._mutator.getType(dataID);
345
+
346
+ !(_recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
311
347
 
312
- !(recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
313
- var typeID = generateTypeID(recordType);
348
+ var _typeID = generateTypeID(_recordType);
314
349
 
315
- var implementsInterface = _this2._mutator.getValue(typeID, abstractKey);
350
+ var _implementsInterface = _this2._mutator.getValue(_typeID, _abstractKey);
316
351
 
317
- if (implementsInterface === true) {
352
+ if (_implementsInterface === true) {
318
353
  _this2._traverseSelections(selection.selections, dataID);
319
- } else if (implementsInterface == null) {
354
+ } else if (_implementsInterface == null) {
320
355
  // unsure if the type implements the interface: data is
321
356
  // missing so don't bother reading the fragment
322
357
  _this2._handleMissing();
323
358
  } // else false: known to not implement the interface
324
359
 
325
- } else {
326
- // legacy behavior for abstract refinements: always check even
327
- // if the type doesn't conform
328
- _this2._traverseSelections(selection.selections, dataID);
329
360
  }
330
361
 
331
362
  break;
@@ -365,11 +396,14 @@ var DataChecker = /*#__PURE__*/function () {
365
396
  _this2._traverseSelections(selection.selections, dataID);
366
397
 
367
398
  break;
368
- // $FlowFixMe[incompatible-type]
369
399
 
370
400
  case FRAGMENT_SPREAD:
401
+ var prevVariables = _this2._variables;
402
+ _this2._variables = getLocalVariables(_this2._variables, selection.fragment.argumentDefinitions, selection.args);
403
+
371
404
  _this2._traverseSelections(selection.fragment.selections, dataID);
372
405
 
406
+ _this2._variables = prevVariables;
373
407
  break;
374
408
 
375
409
  case CLIENT_EXTENSION:
@@ -381,24 +415,21 @@ var DataChecker = /*#__PURE__*/function () {
381
415
  break;
382
416
 
383
417
  case TYPE_DISCRIMINATOR:
384
- if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
385
- var _abstractKey = selection.abstractKey;
386
-
387
- var _recordType = _this2._mutator.getType(dataID);
418
+ var abstractKey = selection.abstractKey;
388
419
 
389
- !(_recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
420
+ var recordType = _this2._mutator.getType(dataID);
390
421
 
391
- var _typeID = generateTypeID(_recordType);
422
+ !(recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
423
+ var typeID = generateTypeID(recordType);
392
424
 
393
- var _implementsInterface = _this2._mutator.getValue(_typeID, _abstractKey);
425
+ var implementsInterface = _this2._mutator.getValue(typeID, abstractKey);
394
426
 
395
- if (_implementsInterface == null) {
396
- // unsure if the type implements the interface: data is
397
- // missing
398
- _this2._handleMissing();
399
- } // else: if it does or doesn't implement, we don't need to check or skip anything else
427
+ if (implementsInterface == null) {
428
+ // unsure if the type implements the interface: data is
429
+ // missing
430
+ _this2._handleMissing();
431
+ } // else: if it does or doesn't implement, we don't need to check or skip anything else
400
432
 
401
- }
402
433
 
403
434
  break;
404
435
 
@@ -446,8 +477,12 @@ var DataChecker = /*#__PURE__*/function () {
446
477
 
447
478
  if (normalizationRootNode != null) {
448
479
  var operation = getOperation(normalizationRootNode);
480
+ var prevVariables = this._variables;
481
+ this._variables = getLocalVariables(this._variables, operation.argumentDefinitions, moduleImport.args);
449
482
 
450
483
  this._traverse(operation, dataID);
484
+
485
+ this._variables = prevVariables;
451
486
  } else {
452
487
  // If the fragment is not available, we assume that the data cannot have been
453
488
  // processed yet and must therefore be missing.
@@ -515,6 +550,40 @@ var DataChecker = /*#__PURE__*/function () {
515
550
  }
516
551
  };
517
552
 
553
+ _proto._checkActorChange = function _checkActorChange(field, dataID) {
554
+ var storageKey = getStorageKey(field, this._variables);
555
+
556
+ var record = this._source.get(dataID);
557
+
558
+ var tuple = record != null ? RelayModernRecord.getActorLinkedRecordID(record, storageKey) : record;
559
+
560
+ if (tuple == null) {
561
+ if (tuple === undefined) {
562
+ this._handleMissing();
563
+ }
564
+ } else {
565
+ var _actorIdentifier = tuple[0],
566
+ linkedID = tuple[1];
567
+ var prevSource = this._source;
568
+ var prevMutator = this._mutator;
569
+ var prevRecordSourceProxy = this._recordSourceProxy;
570
+
571
+ var _this$_getMutatorAndR2 = this._getMutatorAndRecordProxyForActor(_actorIdentifier),
572
+ mutator = _this$_getMutatorAndR2[0],
573
+ recordSourceProxy = _this$_getMutatorAndR2[1];
574
+
575
+ this._source = this._getSourceForActor(_actorIdentifier);
576
+ this._mutator = mutator;
577
+ this._recordSourceProxy = recordSourceProxy;
578
+
579
+ this._traverse(field, linkedID);
580
+
581
+ this._source = prevSource;
582
+ this._mutator = prevMutator;
583
+ this._recordSourceProxy = prevRecordSourceProxy;
584
+ }
585
+ };
586
+
518
587
  _proto._checkFlightField = function _checkFlightField(field, dataID) {
519
588
  var storageKey = getStorageKey(field, this._variables);
520
589