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