relay-runtime 9.0.0 → 10.1.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 (142) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +47 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/handlers/connection/MutationHandlers.js.flow +199 -0
  5. package/index.js +1 -1
  6. package/index.js.flow +335 -0
  7. package/lib/handlers/RelayDefaultHandlerProvider.js +20 -0
  8. package/lib/handlers/connection/ConnectionHandler.js +1 -3
  9. package/lib/handlers/connection/MutationHandlers.js +212 -0
  10. package/lib/index.js +14 -2
  11. package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
  12. package/lib/mutations/RelayRecordProxy.js +1 -3
  13. package/lib/mutations/RelayRecordSourceMutator.js +1 -3
  14. package/lib/mutations/RelayRecordSourceProxy.js +1 -3
  15. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
  16. package/lib/mutations/commitMutation.js +2 -3
  17. package/lib/mutations/validateMutation.js +40 -9
  18. package/lib/network/RelayObservable.js +9 -9
  19. package/lib/network/RelayQueryResponseCache.js +8 -6
  20. package/lib/query/GraphQLTag.js +2 -1
  21. package/lib/query/PreloadableQueryRegistry.js +70 -0
  22. package/lib/query/fetchQuery.js +2 -3
  23. package/lib/query/fetchQueryInternal.js +5 -14
  24. package/lib/store/DataChecker.js +200 -71
  25. package/lib/store/RelayConcreteVariables.js +6 -2
  26. package/lib/store/RelayModernEnvironment.js +124 -65
  27. package/lib/store/RelayModernFragmentSpecResolver.js +19 -14
  28. package/lib/store/RelayModernOperationDescriptor.js +6 -5
  29. package/lib/store/RelayModernQueryExecutor.js +122 -73
  30. package/lib/store/RelayModernRecord.js +14 -9
  31. package/lib/store/RelayModernSelector.js +6 -2
  32. package/lib/store/RelayModernStore.js +281 -131
  33. package/lib/store/RelayOperationTracker.js +35 -78
  34. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  35. package/lib/store/RelayPublishQueue.js +2 -4
  36. package/lib/store/RelayReader.js +304 -52
  37. package/lib/store/RelayRecordSource.js +1 -3
  38. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  39. package/lib/store/RelayReferenceMarker.js +125 -14
  40. package/lib/store/RelayResponseNormalizer.js +261 -66
  41. package/lib/store/RelayStoreReactFlightUtils.js +47 -0
  42. package/lib/store/RelayStoreUtils.js +1 -0
  43. package/lib/store/StoreInspector.js +8 -8
  44. package/lib/store/TypeID.js +28 -0
  45. package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
  46. package/lib/store/defaultRequiredFieldLogger.js +18 -0
  47. package/lib/store/normalizeRelayPayload.js +6 -2
  48. package/lib/store/readInlineData.js +1 -1
  49. package/lib/subscription/requestSubscription.js +4 -3
  50. package/lib/util/NormalizationNode.js +1 -5
  51. package/lib/util/RelayConcreteNode.js +11 -6
  52. package/lib/util/RelayError.js +39 -9
  53. package/lib/util/RelayFeatureFlags.js +6 -3
  54. package/lib/util/RelayReplaySubject.js +3 -3
  55. package/lib/util/createPayloadFor3DField.js +7 -2
  56. package/lib/util/getFragmentIdentifier.js +12 -3
  57. package/lib/util/getOperation.js +33 -0
  58. package/lib/util/getRequestIdentifier.js +2 -2
  59. package/lib/util/isEmptyObject.js +25 -0
  60. package/lib/util/recycleNodesInto.js +6 -7
  61. package/lib/util/reportMissingRequiredFields.js +48 -0
  62. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  63. package/mutations/RelayRecordProxy.js.flow +165 -0
  64. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  65. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  66. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  67. package/mutations/applyOptimisticMutation.js.flow +76 -0
  68. package/mutations/commitLocalUpdate.js.flow +24 -0
  69. package/mutations/commitMutation.js.flow +181 -0
  70. package/mutations/validateMutation.js.flow +242 -0
  71. package/network/ConvertToExecuteFunction.js.flow +49 -0
  72. package/network/RelayNetwork.js.flow +84 -0
  73. package/network/RelayNetworkTypes.js.flow +145 -0
  74. package/network/RelayObservable.js.flow +634 -0
  75. package/network/RelayQueryResponseCache.js.flow +111 -0
  76. package/package.json +2 -2
  77. package/query/GraphQLTag.js.flow +168 -0
  78. package/query/PreloadableQueryRegistry.js.flow +65 -0
  79. package/query/fetchQuery.js.flow +47 -0
  80. package/query/fetchQueryInternal.js.flow +343 -0
  81. package/relay-runtime.js +2 -2
  82. package/relay-runtime.min.js +2 -2
  83. package/store/ClientID.js.flow +43 -0
  84. package/store/DataChecker.js.flow +568 -0
  85. package/store/RelayConcreteVariables.js.flow +96 -0
  86. package/store/RelayModernEnvironment.js.flow +571 -0
  87. package/store/RelayModernFragmentSpecResolver.js.flow +438 -0
  88. package/store/RelayModernOperationDescriptor.js.flow +92 -0
  89. package/store/RelayModernQueryExecutor.js.flow +1345 -0
  90. package/store/RelayModernRecord.js.flow +403 -0
  91. package/store/RelayModernSelector.js.flow +455 -0
  92. package/store/RelayModernStore.js.flow +858 -0
  93. package/store/RelayOperationTracker.js.flow +164 -0
  94. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  95. package/store/RelayPublishQueue.js.flow +401 -0
  96. package/store/RelayReader.js.flow +638 -0
  97. package/store/RelayRecordSource.js.flow +29 -0
  98. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  99. package/store/RelayRecordState.js.flow +37 -0
  100. package/store/RelayReferenceMarker.js.flow +324 -0
  101. package/store/RelayResponseNormalizer.js.flow +791 -0
  102. package/store/RelayStoreReactFlightUtils.js.flow +64 -0
  103. package/store/RelayStoreTypes.js.flow +958 -0
  104. package/store/RelayStoreUtils.js.flow +219 -0
  105. package/store/StoreInspector.js.flow +171 -0
  106. package/store/TypeID.js.flow +28 -0
  107. package/store/ViewerPattern.js.flow +26 -0
  108. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  109. package/store/cloneRelayScalarHandleSourceField.js.flow +62 -0
  110. package/store/createFragmentSpecResolver.js.flow +55 -0
  111. package/store/createRelayContext.js.flow +44 -0
  112. package/store/defaultGetDataID.js.flow +27 -0
  113. package/store/defaultRequiredFieldLogger.js.flow +23 -0
  114. package/store/hasOverlappingIDs.js.flow +34 -0
  115. package/store/isRelayModernEnvironment.js.flow +27 -0
  116. package/store/normalizeRelayPayload.js.flow +51 -0
  117. package/store/readInlineData.js.flow +75 -0
  118. package/subscription/requestSubscription.js.flow +103 -0
  119. package/util/JSResourceTypes.flow.js.flow +20 -0
  120. package/util/NormalizationNode.js.flow +213 -0
  121. package/util/ReaderNode.js.flow +227 -0
  122. package/util/RelayConcreteNode.js.flow +99 -0
  123. package/util/RelayDefaultHandleKey.js.flow +17 -0
  124. package/util/RelayError.js.flow +62 -0
  125. package/util/RelayFeatureFlags.js.flow +37 -0
  126. package/util/RelayProfiler.js.flow +284 -0
  127. package/util/RelayReplaySubject.js.flow +135 -0
  128. package/util/RelayRuntimeTypes.js.flow +72 -0
  129. package/util/createPayloadFor3DField.js.flow +43 -0
  130. package/util/deepFreeze.js.flow +36 -0
  131. package/util/generateID.js.flow +21 -0
  132. package/util/getFragmentIdentifier.js.flow +76 -0
  133. package/util/getOperation.js.flow +40 -0
  134. package/util/getRelayHandleKey.js.flow +41 -0
  135. package/util/getRequestIdentifier.js.flow +42 -0
  136. package/util/isEmptyObject.js.flow +25 -0
  137. package/util/isPromise.js.flow +21 -0
  138. package/util/isScalarAndEqual.js.flow +26 -0
  139. package/util/recycleNodesInto.js.flow +87 -0
  140. package/util/reportMissingRequiredFields.js.flow +51 -0
  141. package/util/resolveImmediate.js.flow +30 -0
  142. package/util/stableCopy.js.flow +35 -0
@@ -10,19 +10,35 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14
+
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
18
+
13
19
  var RelayConcreteNode = require('../util/RelayConcreteNode');
14
20
 
21
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
22
+
15
23
  var RelayModernRecord = require('./RelayModernRecord');
16
24
 
25
+ var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
26
+
17
27
  var RelayStoreUtils = require('./RelayStoreUtils');
18
28
 
19
29
  var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
20
30
 
31
+ var getOperation = require('../util/getOperation');
32
+
21
33
  var invariant = require("fbjs/lib/invariant");
22
34
 
35
+ var _require = require('./TypeID'),
36
+ generateTypeID = _require.generateTypeID;
37
+
23
38
  var CONDITION = RelayConcreteNode.CONDITION,
24
39
  CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
25
40
  DEFER = RelayConcreteNode.DEFER,
41
+ FLIGHT_FIELD = RelayConcreteNode.FLIGHT_FIELD,
26
42
  FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
27
43
  INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
28
44
  LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
@@ -30,8 +46,10 @@ var CONDITION = RelayConcreteNode.CONDITION,
30
46
  LINKED_HANDLE = RelayConcreteNode.LINKED_HANDLE,
31
47
  SCALAR_FIELD = RelayConcreteNode.SCALAR_FIELD,
32
48
  SCALAR_HANDLE = RelayConcreteNode.SCALAR_HANDLE,
33
- STREAM = RelayConcreteNode.STREAM;
34
- var getStorageKey = RelayStoreUtils.getStorageKey,
49
+ STREAM = RelayConcreteNode.STREAM,
50
+ TYPE_DISCRIMINATOR = RelayConcreteNode.TYPE_DISCRIMINATOR;
51
+ var ROOT_ID = RelayStoreUtils.ROOT_ID,
52
+ getStorageKey = RelayStoreUtils.getStorageKey,
35
53
  getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
36
54
 
37
55
  function mark(recordSource, selector, references, operationLoader) {
@@ -46,13 +64,10 @@ function mark(recordSource, selector, references, operationLoader) {
46
64
  */
47
65
 
48
66
 
49
- var RelayReferenceMarker =
50
- /*#__PURE__*/
51
- function () {
67
+ var RelayReferenceMarker = /*#__PURE__*/function () {
52
68
  function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
53
- var _operationLoader;
54
-
55
- this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
69
+ this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
70
+ this._operationName = null;
56
71
  this._recordSource = recordSource;
57
72
  this._references = references;
58
73
  this._variables = variables;
@@ -61,6 +76,10 @@ function () {
61
76
  var _proto = RelayReferenceMarker.prototype;
62
77
 
63
78
  _proto.mark = function mark(node, dataID) {
79
+ if (node.kind === 'Operation' || node.kind === 'SplitOperation') {
80
+ this._operationName = node.name;
81
+ }
82
+
64
83
  this._traverse(node, dataID);
65
84
  };
66
85
 
@@ -106,13 +125,26 @@ function () {
106
125
  break;
107
126
 
108
127
  case INLINE_FRAGMENT:
109
- var typeName = RelayModernRecord.getType(record);
128
+ if (selection.abstractKey == null) {
129
+ var typeName = RelayModernRecord.getType(record);
130
+
131
+ if (typeName != null && typeName === selection.type) {
132
+ _this._traverseSelections(selection.selections, record);
133
+ }
134
+ } else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
135
+ var _typeName = RelayModernRecord.getType(record);
136
+
137
+ var typeID = generateTypeID(_typeName);
138
+
139
+ _this._references.add(typeID);
110
140
 
111
- if (typeName != null && typeName === selection.type) {
141
+ _this._traverseSelections(selection.selections, record);
142
+ } else {
112
143
  _this._traverseSelections(selection.selections, record);
113
144
  }
114
145
 
115
146
  break;
147
+ // $FlowFixMe[incompatible-type]
116
148
 
117
149
  case FRAGMENT_SPREAD:
118
150
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker(): Unexpected fragment spread `...%s`, ' + 'expected all fragments to be inlined.', selection.name) : invariant(false) : void 0;
@@ -147,6 +179,19 @@ function () {
147
179
  case SCALAR_HANDLE:
148
180
  break;
149
181
 
182
+ case TYPE_DISCRIMINATOR:
183
+ {
184
+ if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
185
+ var _typeName2 = RelayModernRecord.getType(record);
186
+
187
+ var _typeID = generateTypeID(_typeName2);
188
+
189
+ _this._references.add(_typeID);
190
+ }
191
+
192
+ break;
193
+ }
194
+
150
195
  case MODULE_IMPORT:
151
196
  _this._traverseModuleImport(selection, record);
152
197
 
@@ -157,6 +202,15 @@ function () {
157
202
 
158
203
  break;
159
204
 
205
+ case FLIGHT_FIELD:
206
+ if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) {
207
+ _this._traverseFlightField(selection, record);
208
+ } else {
209
+ throw new Error('Flight fields are not yet supported.');
210
+ }
211
+
212
+ break;
213
+
160
214
  default:
161
215
  selection;
162
216
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
@@ -165,8 +219,10 @@ function () {
165
219
  };
166
220
 
167
221
  _proto._traverseModuleImport = function _traverseModuleImport(moduleImport, record) {
222
+ var _this$_operationName;
223
+
168
224
  var operationLoader = this._operationLoader;
169
- !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`.') : invariant(false) : void 0;
225
+ !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`. ' + 'Could not load fragment `%s` in operation `%s`.', moduleImport.fragmentName, (_this$_operationName = this._operationName) !== null && _this$_operationName !== void 0 ? _this$_operationName : '(unknown)') : invariant(false) : void 0;
170
226
  var operationKey = getModuleOperationKey(moduleImport.documentName);
171
227
  var operationReference = RelayModernRecord.getValue(record, operationKey);
172
228
 
@@ -174,10 +230,12 @@ function () {
174
230
  return;
175
231
  }
176
232
 
177
- var operation = operationLoader.get(operationReference);
233
+ var normalizationRootNode = operationLoader.get(operationReference);
234
+
235
+ if (normalizationRootNode != null) {
236
+ var selections = getOperation(normalizationRootNode).selections;
178
237
 
179
- if (operation != null) {
180
- this._traverseSelections(operation.selections, record);
238
+ this._traverseSelections(selections, record);
181
239
  } // Otherwise, if the operation is not available, we assume that the data
182
240
  // cannot have been processed yet and therefore isn't in the store to
183
241
  // begin with.
@@ -212,6 +270,59 @@ function () {
212
270
  });
213
271
  };
214
272
 
273
+ _proto._traverseFlightField = function _traverseFlightField(field, record) {
274
+ var storageKey = getStorageKey(field, this._variables);
275
+ var linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey);
276
+
277
+ if (linkedID == null) {
278
+ return;
279
+ }
280
+
281
+ this._references.add(linkedID);
282
+
283
+ var reactFlightClientResponseRecord = this._recordSource.get(linkedID);
284
+
285
+ if (reactFlightClientResponseRecord == null) {
286
+ return;
287
+ }
288
+
289
+ var reachableQueries = RelayModernRecord.getValue(reactFlightClientResponseRecord, RelayStoreReactFlightUtils.REACT_FLIGHT_QUERIES_STORAGE_KEY);
290
+
291
+ if (!Array.isArray(reachableQueries)) {
292
+ return;
293
+ }
294
+
295
+ 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.
298
+
299
+ var prevVariables = this._variables; // $FlowFixMe[incompatible-cast]
300
+
301
+ var _iterator = _createForOfIteratorHelper(reachableQueries),
302
+ _step;
303
+
304
+ try {
305
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
306
+ var query = _step.value;
307
+ this._variables = query.variables;
308
+ var operationReference = query.module;
309
+ var normalizationRootNode = operationLoader.get(operationReference);
310
+
311
+ if (normalizationRootNode != null) {
312
+ var operation = getOperation(normalizationRootNode);
313
+
314
+ this._traverse(operation, ROOT_ID);
315
+ }
316
+ }
317
+ } catch (err) {
318
+ _iterator.e(err);
319
+ } finally {
320
+ _iterator.f();
321
+ }
322
+
323
+ this._variables = prevVariables;
324
+ };
325
+
215
326
  return RelayReferenceMarker;
216
327
  }();
217
328