relay-runtime 11.0.0 → 13.0.0-rc.0

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 (169) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +2 -2
  2. package/handlers/connection/ConnectionHandler.js.flow +8 -10
  3. package/handlers/connection/MutationHandlers.js.flow +31 -7
  4. package/index.js +1 -1
  5. package/index.js.flow +60 -36
  6. package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
  7. package/lib/handlers/connection/ConnectionHandler.js +8 -8
  8. package/lib/handlers/connection/MutationHandlers.js +61 -5
  9. package/lib/index.js +58 -43
  10. package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
  11. package/lib/multi-actor-environment/ActorSpecificEnvironment.js +152 -0
  12. package/lib/multi-actor-environment/ActorUtils.js +27 -0
  13. package/lib/multi-actor-environment/MultiActorEnvironment.js +419 -0
  14. package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
  15. package/lib/multi-actor-environment/index.js +21 -0
  16. package/lib/mutations/RelayDeclarativeMutationConfig.js +4 -1
  17. package/lib/mutations/RelayRecordProxy.js +3 -2
  18. package/lib/mutations/RelayRecordSourceMutator.js +3 -2
  19. package/lib/mutations/RelayRecordSourceProxy.js +12 -4
  20. package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -5
  21. package/lib/mutations/applyOptimisticMutation.js +6 -6
  22. package/lib/mutations/commitMutation.js +14 -10
  23. package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +238 -0
  24. package/lib/mutations/validateMutation.js +12 -5
  25. package/lib/network/ConvertToExecuteFunction.js +2 -1
  26. package/lib/network/RelayNetwork.js +3 -2
  27. package/lib/network/RelayQueryResponseCache.js +21 -4
  28. package/lib/network/wrapNetworkWithLogObserver.js +79 -0
  29. package/lib/query/GraphQLTag.js +3 -2
  30. package/lib/query/fetchQuery.js +6 -5
  31. package/lib/query/fetchQueryInternal.js +1 -1
  32. package/lib/query/fetchQuery_DEPRECATED.js +2 -1
  33. package/lib/store/ClientID.js +7 -1
  34. package/lib/store/DataChecker.js +141 -60
  35. package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +532 -195
  36. package/lib/store/RelayConcreteVariables.js +24 -4
  37. package/lib/store/RelayModernEnvironment.js +175 -234
  38. package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
  39. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  40. package/lib/store/RelayModernRecord.js +47 -12
  41. package/lib/store/RelayModernSelector.js +14 -8
  42. package/lib/store/RelayModernStore.js +58 -29
  43. package/lib/store/RelayOperationTracker.js +34 -24
  44. package/lib/store/RelayPublishQueue.js +41 -13
  45. package/lib/store/RelayReader.js +287 -46
  46. package/lib/store/RelayRecordSource.js +87 -3
  47. package/lib/store/RelayReferenceMarker.js +55 -31
  48. package/lib/store/RelayResponseNormalizer.js +250 -108
  49. package/lib/store/RelayStoreReactFlightUtils.js +8 -12
  50. package/lib/store/RelayStoreSubscriptions.js +14 -9
  51. package/lib/store/RelayStoreUtils.js +11 -5
  52. package/lib/store/ResolverCache.js +213 -0
  53. package/lib/store/ResolverFragments.js +61 -0
  54. package/lib/store/cloneRelayHandleSourceField.js +5 -4
  55. package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
  56. package/lib/store/createRelayContext.js +4 -2
  57. package/lib/store/defaultGetDataID.js +3 -1
  58. package/lib/store/readInlineData.js +6 -2
  59. package/lib/subscription/requestSubscription.js +35 -9
  60. package/lib/util/RelayConcreteNode.js +4 -0
  61. package/lib/util/RelayFeatureFlags.js +11 -4
  62. package/lib/util/RelayProfiler.js +17 -187
  63. package/lib/util/RelayReplaySubject.js +22 -7
  64. package/lib/util/RelayRuntimeTypes.js +0 -6
  65. package/lib/util/StringInterner.js +71 -0
  66. package/lib/util/deepFreeze.js +1 -0
  67. package/lib/util/getFragmentIdentifier.js +15 -7
  68. package/lib/util/getOperation.js +2 -1
  69. package/lib/util/getPaginationMetadata.js +41 -0
  70. package/lib/util/getPaginationVariables.js +66 -0
  71. package/lib/util/getPendingOperationsForFragment.js +55 -0
  72. package/lib/util/getRefetchMetadata.js +36 -0
  73. package/lib/util/getRelayHandleKey.js +2 -2
  74. package/lib/util/getRequestIdentifier.js +2 -2
  75. package/lib/util/getValueAtPath.js +51 -0
  76. package/lib/util/isEmptyObject.js +1 -1
  77. package/lib/util/registerEnvironmentWithDevTools.js +26 -0
  78. package/lib/util/withDuration.js +31 -0
  79. package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
  80. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +225 -0
  81. package/multi-actor-environment/ActorUtils.js.flow +33 -0
  82. package/multi-actor-environment/MultiActorEnvironment.js.flow +506 -0
  83. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +261 -0
  84. package/multi-actor-environment/index.js.flow +26 -0
  85. package/mutations/RelayDeclarativeMutationConfig.js.flow +32 -26
  86. package/mutations/RelayRecordProxy.js.flow +4 -5
  87. package/mutations/RelayRecordSourceMutator.js.flow +4 -6
  88. package/mutations/RelayRecordSourceProxy.js.flow +19 -10
  89. package/mutations/RelayRecordSourceSelectorProxy.js.flow +22 -7
  90. package/mutations/applyOptimisticMutation.js.flow +13 -14
  91. package/mutations/commitLocalUpdate.js.flow +1 -1
  92. package/mutations/commitMutation.js.flow +35 -46
  93. package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +309 -0
  94. package/mutations/validateMutation.js.flow +28 -16
  95. package/network/ConvertToExecuteFunction.js.flow +2 -2
  96. package/network/RelayNetwork.js.flow +4 -5
  97. package/network/RelayNetworkTypes.js.flow +17 -8
  98. package/network/RelayObservable.js.flow +1 -1
  99. package/network/RelayQueryResponseCache.js.flow +34 -20
  100. package/network/wrapNetworkWithLogObserver.js.flow +100 -0
  101. package/package.json +3 -2
  102. package/query/GraphQLTag.js.flow +9 -9
  103. package/query/PreloadableQueryRegistry.js.flow +2 -1
  104. package/query/fetchQuery.js.flow +11 -13
  105. package/query/fetchQueryInternal.js.flow +6 -9
  106. package/query/fetchQuery_DEPRECATED.js.flow +6 -6
  107. package/relay-runtime.js +2 -2
  108. package/relay-runtime.min.js +2 -2
  109. package/store/ClientID.js.flow +14 -3
  110. package/store/DataChecker.js.flow +162 -67
  111. package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +616 -283
  112. package/store/RelayConcreteVariables.js.flow +27 -5
  113. package/store/RelayModernEnvironment.js.flow +176 -235
  114. package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
  115. package/store/RelayModernOperationDescriptor.js.flow +12 -7
  116. package/store/RelayModernRecord.js.flow +67 -11
  117. package/store/RelayModernSelector.js.flow +24 -14
  118. package/store/RelayModernStore.js.flow +72 -36
  119. package/store/RelayOperationTracker.js.flow +59 -43
  120. package/store/RelayOptimisticRecordSource.js.flow +2 -2
  121. package/store/RelayPublishQueue.js.flow +79 -34
  122. package/store/RelayReader.js.flow +351 -72
  123. package/store/RelayRecordSource.js.flow +72 -6
  124. package/store/RelayReferenceMarker.js.flow +60 -33
  125. package/store/RelayResponseNormalizer.js.flow +288 -102
  126. package/store/RelayStoreReactFlightUtils.js.flow +9 -13
  127. package/store/RelayStoreSubscriptions.js.flow +19 -11
  128. package/store/RelayStoreTypes.js.flow +210 -44
  129. package/store/RelayStoreUtils.js.flow +25 -11
  130. package/store/ResolverCache.js.flow +249 -0
  131. package/store/ResolverFragments.js.flow +121 -0
  132. package/store/StoreInspector.js.flow +2 -2
  133. package/store/TypeID.js.flow +1 -1
  134. package/store/ViewerPattern.js.flow +2 -2
  135. package/store/cloneRelayHandleSourceField.js.flow +5 -6
  136. package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
  137. package/store/createFragmentSpecResolver.js.flow +3 -4
  138. package/store/createRelayContext.js.flow +3 -3
  139. package/store/defaultGetDataID.js.flow +3 -1
  140. package/store/normalizeRelayPayload.js.flow +6 -7
  141. package/store/readInlineData.js.flow +7 -8
  142. package/subscription/requestSubscription.js.flow +54 -27
  143. package/util/NormalizationNode.js.flow +16 -3
  144. package/util/ReaderNode.js.flow +38 -2
  145. package/util/RelayConcreteNode.js.flow +4 -0
  146. package/util/RelayFeatureFlags.js.flow +24 -8
  147. package/util/RelayProfiler.js.flow +22 -194
  148. package/util/RelayReplaySubject.js.flow +9 -9
  149. package/util/RelayRuntimeTypes.js.flow +73 -4
  150. package/util/StringInterner.js.flow +69 -0
  151. package/util/createPayloadFor3DField.js.flow +3 -3
  152. package/util/deepFreeze.js.flow +2 -1
  153. package/util/getFragmentIdentifier.js.flow +27 -15
  154. package/util/getOperation.js.flow +2 -2
  155. package/util/getPaginationMetadata.js.flow +72 -0
  156. package/util/getPaginationVariables.js.flow +108 -0
  157. package/util/getPendingOperationsForFragment.js.flow +62 -0
  158. package/util/getRefetchMetadata.js.flow +79 -0
  159. package/util/getRelayHandleKey.js.flow +1 -2
  160. package/util/getRequestIdentifier.js.flow +3 -3
  161. package/util/getValueAtPath.js.flow +46 -0
  162. package/util/isEmptyObject.js.flow +2 -1
  163. package/util/registerEnvironmentWithDevTools.js.flow +33 -0
  164. package/util/resolveImmediate.js.flow +1 -1
  165. package/util/withDuration.js.flow +32 -0
  166. package/lib/store/RelayRecordSourceMapImpl.js +0 -107
  167. package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
  168. package/store/RelayRecordSourceMapImpl.js.flow +0 -91
  169. package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
@@ -14,26 +14,31 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
16
16
 
17
+ var getOperation = require('../util/getOperation');
18
+
17
19
  var RelayConcreteNode = require('../util/RelayConcreteNode');
18
20
 
19
21
  var RelayFeatureFlags = require('../util/RelayFeatureFlags');
20
22
 
23
+ var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
24
+
25
+ var _require = require('./RelayConcreteVariables'),
26
+ getLocalVariables = _require.getLocalVariables;
27
+
21
28
  var RelayModernRecord = require('./RelayModernRecord');
22
29
 
23
30
  var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
24
31
 
25
32
  var RelayStoreUtils = require('./RelayStoreUtils');
26
33
 
27
- var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
34
+ var _require2 = require('./TypeID'),
35
+ generateTypeID = _require2.generateTypeID;
28
36
 
29
- var getOperation = require('../util/getOperation');
37
+ var invariant = require('invariant');
30
38
 
31
- var invariant = require("fbjs/lib/invariant");
32
-
33
- var _require = require('./TypeID'),
34
- generateTypeID = _require.generateTypeID;
35
-
36
- var CONDITION = RelayConcreteNode.CONDITION,
39
+ var ACTOR_CHANGE = RelayConcreteNode.ACTOR_CHANGE,
40
+ CONDITION = RelayConcreteNode.CONDITION,
41
+ CLIENT_COMPONENT = RelayConcreteNode.CLIENT_COMPONENT,
37
42
  CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
38
43
  DEFER = RelayConcreteNode.DEFER,
39
44
  FLIGHT_FIELD = RelayConcreteNode.FLIGHT_FIELD,
@@ -50,11 +55,11 @@ var ROOT_ID = RelayStoreUtils.ROOT_ID,
50
55
  getStorageKey = RelayStoreUtils.getStorageKey,
51
56
  getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
52
57
 
53
- function mark(recordSource, selector, references, operationLoader) {
58
+ function mark(recordSource, selector, references, operationLoader, shouldProcessClientComponents) {
54
59
  var dataID = selector.dataID,
55
60
  node = selector.node,
56
61
  variables = selector.variables;
57
- var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
62
+ var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader, shouldProcessClientComponents);
58
63
  marker.mark(node, dataID);
59
64
  }
60
65
  /**
@@ -63,12 +68,13 @@ function mark(recordSource, selector, references, operationLoader) {
63
68
 
64
69
 
65
70
  var RelayReferenceMarker = /*#__PURE__*/function () {
66
- function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
71
+ function RelayReferenceMarker(recordSource, variables, references, operationLoader, shouldProcessClientComponents) {
67
72
  this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
68
73
  this._operationName = null;
69
74
  this._recordSource = recordSource;
70
75
  this._references = references;
71
76
  this._variables = variables;
77
+ this._shouldProcessClientComponents = shouldProcessClientComponents;
72
78
  }
73
79
 
74
80
  var _proto = RelayReferenceMarker.prototype;
@@ -104,6 +110,12 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
104
110
  selections.forEach(function (selection) {
105
111
  /* eslint-disable no-fallthrough */
106
112
  switch (selection.kind) {
113
+ case ACTOR_CHANGE:
114
+ // TODO: T89695151 Support multi-actor record sources in RelayReferenceMarker.js
115
+ _this._traverseLink(selection.linkedField, record);
116
+
117
+ break;
118
+
107
119
  case LINKED_FIELD:
108
120
  if (selection.plural) {
109
121
  _this._traversePluralLink(selection, record);
@@ -114,7 +126,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
114
126
  break;
115
127
 
116
128
  case CONDITION:
117
- var conditionValue = _this._getVariableValue(selection.condition);
129
+ var conditionValue = Boolean(_this._getVariableValue(selection.condition));
118
130
 
119
131
  if (conditionValue === selection.passingValue) {
120
132
  _this._traverseSelections(selection.selections, record);
@@ -129,24 +141,25 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
129
141
  if (typeName != null && typeName === selection.type) {
130
142
  _this._traverseSelections(selection.selections, record);
131
143
  }
132
- } else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
144
+ } else {
133
145
  var _typeName = RelayModernRecord.getType(record);
134
146
 
135
147
  var typeID = generateTypeID(_typeName);
136
148
 
137
149
  _this._references.add(typeID);
138
150
 
139
- _this._traverseSelections(selection.selections, record);
140
- } else {
141
151
  _this._traverseSelections(selection.selections, record);
142
152
  }
143
153
 
144
154
  break;
145
- // $FlowFixMe[incompatible-type]
146
155
 
147
156
  case FRAGMENT_SPREAD:
157
+ var prevVariables = _this._variables;
158
+ _this._variables = getLocalVariables(_this._variables, selection.fragment.argumentDefinitions, selection.args);
159
+
148
160
  _this._traverseSelections(selection.fragment.selections, record);
149
161
 
162
+ _this._variables = prevVariables;
150
163
  break;
151
164
 
152
165
  case LINKED_HANDLE:
@@ -181,13 +194,11 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
181
194
 
182
195
  case TYPE_DISCRIMINATOR:
183
196
  {
184
- if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
185
- var _typeName2 = RelayModernRecord.getType(record);
197
+ var _typeName2 = RelayModernRecord.getType(record);
186
198
 
187
- var _typeID = generateTypeID(_typeName2);
199
+ var _typeID = generateTypeID(_typeName2);
188
200
 
189
- _this._references.add(_typeID);
190
- }
201
+ _this._references.add(_typeID);
191
202
 
192
203
  break;
193
204
  }
@@ -211,6 +222,15 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
211
222
 
212
223
  break;
213
224
 
225
+ case CLIENT_COMPONENT:
226
+ if (_this._shouldProcessClientComponents === false) {
227
+ break;
228
+ }
229
+
230
+ _this._traverseSelections(selection.fragment.selections, record);
231
+
232
+ break;
233
+
214
234
  default:
215
235
  selection;
216
236
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
@@ -233,9 +253,13 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
233
253
  var normalizationRootNode = operationLoader.get(operationReference);
234
254
 
235
255
  if (normalizationRootNode != null) {
236
- var selections = getOperation(normalizationRootNode).selections;
256
+ var operation = getOperation(normalizationRootNode);
257
+ var prevVariables = this._variables;
258
+ this._variables = getLocalVariables(this._variables, operation.argumentDefinitions, moduleImport.args);
259
+
260
+ this._traverseSelections(operation.selections, record);
237
261
 
238
- this._traverseSelections(selections, record);
262
+ this._variables = prevVariables;
239
263
  } // Otherwise, if the operation is not available, we assume that the data
240
264
  // cannot have been processed yet and therefore isn't in the store to
241
265
  // begin with.
@@ -286,26 +310,26 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
286
310
  return;
287
311
  }
288
312
 
289
- var reachableQueries = RelayModernRecord.getValue(reactFlightClientResponseRecord, RelayStoreReactFlightUtils.REACT_FLIGHT_QUERIES_STORAGE_KEY);
313
+ var reachableExecutableDefinitions = RelayModernRecord.getValue(reactFlightClientResponseRecord, RelayStoreReactFlightUtils.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY);
290
314
 
291
- if (!Array.isArray(reachableQueries)) {
315
+ if (!Array.isArray(reachableExecutableDefinitions)) {
292
316
  return;
293
317
  }
294
318
 
295
319
  var operationLoader = this._operationLoader;
296
- !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable queries aren't
297
- // the same as what's in scope for the outer query.
320
+ !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable executable
321
+ // definitions aren't the same as what's in scope for the outer query.
298
322
 
299
323
  var prevVariables = this._variables; // $FlowFixMe[incompatible-cast]
300
324
 
301
- var _iterator = (0, _createForOfIteratorHelper2["default"])(reachableQueries),
325
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(reachableExecutableDefinitions),
302
326
  _step;
303
327
 
304
328
  try {
305
329
  for (_iterator.s(); !(_step = _iterator.n()).done;) {
306
- var query = _step.value;
307
- this._variables = query.variables;
308
- var operationReference = query.module;
330
+ var definition = _step.value;
331
+ this._variables = definition.variables;
332
+ var operationReference = definition.module;
309
333
  var normalizationRootNode = operationLoader.get(operationReference);
310
334
 
311
335
  if (normalizationRootNode != null) {