relay-runtime 8.0.0 → 10.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.
Files changed (135) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +41 -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 +88 -0
  5. package/index.js +1 -1
  6. package/index.js.flow +320 -0
  7. package/lib/handlers/RelayDefaultHandlerProvider.js +13 -2
  8. package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +33 -35
  9. package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +2 -2
  10. package/lib/handlers/connection/MutationHandlers.js +86 -0
  11. package/lib/index.js +15 -19
  12. package/lib/mutations/RelayDeclarativeMutationConfig.js +29 -52
  13. package/lib/mutations/RelayRecordProxy.js +1 -3
  14. package/lib/mutations/RelayRecordSourceMutator.js +2 -9
  15. package/lib/mutations/RelayRecordSourceProxy.js +2 -4
  16. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -13
  17. package/lib/mutations/commitMutation.js +13 -3
  18. package/lib/mutations/validateMutation.js +16 -9
  19. package/lib/network/RelayObservable.js +9 -9
  20. package/lib/network/RelayQueryResponseCache.js +8 -6
  21. package/lib/query/PreloadableQueryRegistry.js +70 -0
  22. package/lib/query/fetchQueryInternal.js +31 -23
  23. package/lib/store/DataChecker.js +122 -110
  24. package/lib/store/RelayConcreteVariables.js +6 -2
  25. package/lib/store/RelayModernEnvironment.js +121 -67
  26. package/lib/store/RelayModernFragmentSpecResolver.js +12 -16
  27. package/lib/store/RelayModernQueryExecutor.js +389 -314
  28. package/lib/store/RelayModernRecord.js +14 -9
  29. package/lib/store/RelayModernSelector.js +7 -3
  30. package/lib/store/RelayModernStore.js +289 -484
  31. package/lib/store/RelayOperationTracker.js +35 -78
  32. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  33. package/lib/store/RelayPublishQueue.js +6 -33
  34. package/lib/store/RelayReader.js +113 -45
  35. package/lib/store/RelayRecordSource.js +2 -9
  36. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  37. package/lib/store/RelayReferenceMarker.js +40 -60
  38. package/lib/store/RelayResponseNormalizer.js +158 -193
  39. package/lib/store/RelayStoreUtils.js +1 -0
  40. package/lib/store/StoreInspector.js +8 -8
  41. package/lib/store/TypeID.js +28 -0
  42. package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
  43. package/lib/store/normalizeRelayPayload.js +6 -2
  44. package/lib/store/readInlineData.js +1 -1
  45. package/lib/subscription/requestSubscription.js +5 -3
  46. package/lib/util/RelayConcreteNode.js +9 -6
  47. package/lib/util/RelayError.js +39 -9
  48. package/lib/util/RelayFeatureFlags.js +2 -5
  49. package/lib/util/RelayReplaySubject.js +3 -3
  50. package/lib/util/createPayloadFor3DField.js +7 -2
  51. package/lib/util/getRequestIdentifier.js +2 -2
  52. package/lib/util/recycleNodesInto.js +2 -6
  53. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  54. package/mutations/RelayRecordProxy.js.flow +165 -0
  55. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  56. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  57. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  58. package/mutations/applyOptimisticMutation.js.flow +76 -0
  59. package/mutations/commitLocalUpdate.js.flow +24 -0
  60. package/mutations/commitMutation.js.flow +182 -0
  61. package/mutations/validateMutation.js.flow +213 -0
  62. package/network/ConvertToExecuteFunction.js.flow +49 -0
  63. package/network/RelayNetwork.js.flow +84 -0
  64. package/network/RelayNetworkTypes.js.flow +123 -0
  65. package/network/RelayObservable.js.flow +634 -0
  66. package/network/RelayQueryResponseCache.js.flow +111 -0
  67. package/package.json +1 -1
  68. package/query/GraphQLTag.js.flow +166 -0
  69. package/query/PreloadableQueryRegistry.js.flow +65 -0
  70. package/query/fetchQuery.js.flow +47 -0
  71. package/query/fetchQueryInternal.js.flow +348 -0
  72. package/relay-runtime.js +2 -2
  73. package/relay-runtime.min.js +2 -2
  74. package/store/ClientID.js.flow +43 -0
  75. package/store/DataChecker.js.flow +502 -0
  76. package/store/RelayConcreteVariables.js.flow +96 -0
  77. package/store/RelayModernEnvironment.js.flow +551 -0
  78. package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
  79. package/store/RelayModernOperationDescriptor.js.flow +88 -0
  80. package/store/RelayModernQueryExecutor.js.flow +1321 -0
  81. package/store/RelayModernRecord.js.flow +403 -0
  82. package/store/RelayModernSelector.js.flow +455 -0
  83. package/store/RelayModernStore.js.flow +842 -0
  84. package/store/RelayOperationTracker.js.flow +164 -0
  85. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  86. package/store/RelayPublishQueue.js.flow +401 -0
  87. package/store/RelayReader.js.flow +473 -0
  88. package/store/RelayRecordSource.js.flow +29 -0
  89. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  90. package/store/RelayRecordState.js.flow +37 -0
  91. package/store/RelayReferenceMarker.js.flow +257 -0
  92. package/store/RelayResponseNormalizer.js.flow +680 -0
  93. package/store/RelayStoreTypes.js.flow +899 -0
  94. package/store/RelayStoreUtils.js.flow +219 -0
  95. package/store/StoreInspector.js.flow +171 -0
  96. package/store/TypeID.js.flow +28 -0
  97. package/store/ViewerPattern.js.flow +26 -0
  98. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  99. package/store/cloneRelayScalarHandleSourceField.js.flow +62 -0
  100. package/store/createFragmentSpecResolver.js.flow +55 -0
  101. package/store/createRelayContext.js.flow +44 -0
  102. package/store/defaultGetDataID.js.flow +27 -0
  103. package/store/hasOverlappingIDs.js.flow +34 -0
  104. package/store/isRelayModernEnvironment.js.flow +27 -0
  105. package/store/normalizeRelayPayload.js.flow +51 -0
  106. package/store/readInlineData.js.flow +75 -0
  107. package/subscription/requestSubscription.js.flow +100 -0
  108. package/util/JSResourceTypes.flow.js.flow +20 -0
  109. package/util/NormalizationNode.js.flow +198 -0
  110. package/util/ReaderNode.js.flow +208 -0
  111. package/util/RelayConcreteNode.js.flow +93 -0
  112. package/util/RelayDefaultHandleKey.js.flow +17 -0
  113. package/util/RelayError.js.flow +62 -0
  114. package/util/RelayFeatureFlags.js.flow +30 -0
  115. package/util/RelayProfiler.js.flow +284 -0
  116. package/util/RelayReplaySubject.js.flow +135 -0
  117. package/util/RelayRuntimeTypes.js.flow +72 -0
  118. package/util/createPayloadFor3DField.js.flow +43 -0
  119. package/util/deepFreeze.js.flow +36 -0
  120. package/util/generateID.js.flow +21 -0
  121. package/util/getFragmentIdentifier.js.flow +52 -0
  122. package/util/getRelayHandleKey.js.flow +41 -0
  123. package/util/getRequestIdentifier.js.flow +42 -0
  124. package/util/isPromise.js.flow +21 -0
  125. package/util/isScalarAndEqual.js.flow +26 -0
  126. package/util/recycleNodesInto.js.flow +76 -0
  127. package/util/resolveImmediate.js.flow +30 -0
  128. package/util/stableCopy.js.flow +35 -0
  129. package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
  130. package/lib/handlers/getRelayDefaultMissingFieldHandlers.js +0 -36
  131. package/lib/query/RelayModernGraphQLTag.js +0 -104
  132. package/lib/store/RelayConnection.js +0 -37
  133. package/lib/store/RelayConnectionResolver.js +0 -178
  134. package/lib/store/RelayRecordSourceObjectImpl.js +0 -79
  135. package/lib/util/getFragmentSpecIdentifier.js +0 -27
@@ -10,6 +10,12 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { 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 it, 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(n); 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 RelayRecordState = require('./RelayRecordState');
14
20
 
15
21
  var EXISTENT = RelayRecordState.EXISTENT,
@@ -20,9 +26,7 @@ var EXISTENT = RelayRecordState.EXISTENT,
20
26
  * `RelayStoreTypes`) that holds all records in memory (JS Map).
21
27
  */
22
28
 
23
- var RelayMapRecordSourceMapImpl =
24
- /*#__PURE__*/
25
- function () {
29
+ var RelayMapRecordSourceMapImpl = /*#__PURE__*/function () {
26
30
  function RelayMapRecordSourceMapImpl(records) {
27
31
  var _this = this;
28
32
 
@@ -79,30 +83,21 @@ function () {
79
83
 
80
84
  _proto.toJSON = function toJSON() {
81
85
  var obj = {};
82
- var _iteratorNormalCompletion = true;
83
- var _didIteratorError = false;
84
- var _iteratorError = undefined;
86
+
87
+ var _iterator = _createForOfIteratorHelper(this._records),
88
+ _step;
85
89
 
86
90
  try {
87
- for (var _iterator = this._records[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
91
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
88
92
  var _step$value = _step.value,
89
93
  key = _step$value[0],
90
94
  value = _step$value[1];
91
95
  obj[key] = value;
92
96
  }
93
97
  } catch (err) {
94
- _didIteratorError = true;
95
- _iteratorError = err;
98
+ _iterator.e(err);
96
99
  } finally {
97
- try {
98
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
99
- _iterator["return"]();
100
- }
101
- } finally {
102
- if (_didIteratorError) {
103
- throw _iteratorError;
104
- }
105
- }
100
+ _iterator.f();
106
101
  }
107
102
 
108
103
  return obj;
@@ -12,7 +12,7 @@
12
12
 
13
13
  var RelayConcreteNode = require('../util/RelayConcreteNode');
14
14
 
15
- var RelayConnection = require('./RelayConnection');
15
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
16
16
 
17
17
  var RelayModernRecord = require('./RelayModernRecord');
18
18
 
@@ -22,10 +22,12 @@ var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
22
22
 
23
23
  var invariant = require("fbjs/lib/invariant");
24
24
 
25
+ var _require = require('./TypeID'),
26
+ generateTypeID = _require.generateTypeID;
27
+
25
28
  var CONDITION = RelayConcreteNode.CONDITION,
26
29
  CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
27
30
  DEFER = RelayConcreteNode.DEFER,
28
- CONNECTION = RelayConcreteNode.CONNECTION,
29
31
  FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
30
32
  INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
31
33
  LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
@@ -33,15 +35,16 @@ var CONDITION = RelayConcreteNode.CONDITION,
33
35
  LINKED_HANDLE = RelayConcreteNode.LINKED_HANDLE,
34
36
  SCALAR_FIELD = RelayConcreteNode.SCALAR_FIELD,
35
37
  SCALAR_HANDLE = RelayConcreteNode.SCALAR_HANDLE,
36
- STREAM = RelayConcreteNode.STREAM;
38
+ STREAM = RelayConcreteNode.STREAM,
39
+ TYPE_DISCRIMINATOR = RelayConcreteNode.TYPE_DISCRIMINATOR;
37
40
  var getStorageKey = RelayStoreUtils.getStorageKey,
38
41
  getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
39
42
 
40
- function mark(recordSource, selector, references, connectionReferences, getConnectionEvents, operationLoader) {
43
+ function mark(recordSource, selector, references, operationLoader) {
41
44
  var dataID = selector.dataID,
42
45
  node = selector.node,
43
46
  variables = selector.variables;
44
- var marker = new RelayReferenceMarker(recordSource, variables, references, connectionReferences, getConnectionEvents, operationLoader);
47
+ var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
45
48
  marker.mark(node, dataID);
46
49
  }
47
50
  /**
@@ -49,15 +52,9 @@ function mark(recordSource, selector, references, connectionReferences, getConne
49
52
  */
50
53
 
51
54
 
52
- var RelayReferenceMarker =
53
- /*#__PURE__*/
54
- function () {
55
- function RelayReferenceMarker(recordSource, variables, references, connectionReferences, getConnectionEvents, operationLoader) {
56
- var _operationLoader;
57
-
58
- this._connectionReferences = connectionReferences;
59
- this._getConnectionEvents = getConnectionEvents;
60
- this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
55
+ var RelayReferenceMarker = /*#__PURE__*/function () {
56
+ function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
57
+ this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
61
58
  this._recordSource = recordSource;
62
59
  this._references = references;
63
60
  this._variables = variables;
@@ -111,9 +108,21 @@ function () {
111
108
  break;
112
109
 
113
110
  case INLINE_FRAGMENT:
114
- var typeName = RelayModernRecord.getType(record);
111
+ if (selection.abstractKey == null) {
112
+ var typeName = RelayModernRecord.getType(record);
113
+
114
+ if (typeName != null && typeName === selection.type) {
115
+ _this._traverseSelections(selection.selections, record);
116
+ }
117
+ } else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
118
+ var _typeName = RelayModernRecord.getType(record);
119
+
120
+ var typeID = generateTypeID(_typeName);
115
121
 
116
- if (typeName != null && typeName === selection.type) {
122
+ _this._references.add(typeID);
123
+
124
+ _this._traverseSelections(selection.selections, record);
125
+ } else {
117
126
  _this._traverseSelections(selection.selections, record);
118
127
  }
119
128
 
@@ -152,6 +161,19 @@ function () {
152
161
  case SCALAR_HANDLE:
153
162
  break;
154
163
 
164
+ case TYPE_DISCRIMINATOR:
165
+ {
166
+ if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
167
+ var _typeName2 = RelayModernRecord.getType(record);
168
+
169
+ var _typeID = generateTypeID(_typeName2);
170
+
171
+ _this._references.add(_typeID);
172
+ }
173
+
174
+ break;
175
+ }
176
+
155
177
  case MODULE_IMPORT:
156
178
  _this._traverseModuleImport(selection, record);
157
179
 
@@ -162,11 +184,6 @@ function () {
162
184
 
163
185
  break;
164
186
 
165
- case CONNECTION:
166
- _this._traverseConnection(selection, record);
167
-
168
- break;
169
-
170
187
  default:
171
188
  selection;
172
189
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
@@ -174,43 +191,6 @@ function () {
174
191
  });
175
192
  };
176
193
 
177
- _proto._traverseConnection = function _traverseConnection(connection, record) {
178
- var _this2 = this;
179
-
180
- var parentID = RelayModernRecord.getDataID(record);
181
- var connectionID = RelayConnection.createConnectionID(parentID, connection.label);
182
-
183
- if (this._connectionReferences.has(connectionID)) {
184
- return;
185
- }
186
-
187
- this._connectionReferences.add(connectionID);
188
-
189
- var connectionEvents = this._getConnectionEvents(connectionID);
190
-
191
- if (connectionEvents == null || connectionEvents.length === 0) {
192
- return;
193
- }
194
-
195
- connectionEvents.forEach(function (event) {
196
- if (event.kind === 'fetch') {
197
- event.edgeIDs.forEach(function (edgeID) {
198
- if (edgeID != null) {
199
- _this2._traverse(connection.edges, edgeID);
200
- }
201
- });
202
- } else if (event.kind === 'insert') {
203
- _this2._traverse(connection.edges, event.edgeID);
204
- } else if (event.kind === 'stream.edge') {
205
- _this2._traverse(connection.edges, event.edgeID);
206
- } else if (event.kind === 'stream.pageInfo') {// no-op
207
- } else {
208
- event;
209
- !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unexpected connection event kind `%s`.', event.kind) : invariant(false) : void 0;
210
- }
211
- });
212
- };
213
-
214
194
  _proto._traverseModuleImport = function _traverseModuleImport(moduleImport, record) {
215
195
  var operationLoader = this._operationLoader;
216
196
  !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`.') : invariant(false) : void 0;
@@ -243,7 +223,7 @@ function () {
243
223
  };
244
224
 
245
225
  _proto._traversePluralLink = function _traversePluralLink(field, record) {
246
- var _this3 = this;
226
+ var _this2 = this;
247
227
 
248
228
  var storageKey = getStorageKey(field, this._variables);
249
229
  var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
@@ -254,7 +234,7 @@ function () {
254
234
 
255
235
  linkedIDs.forEach(function (linkedID) {
256
236
  if (linkedID != null) {
257
- _this3._traverse(field, linkedID);
237
+ _this2._traverse(field, linkedID);
258
238
  }
259
239
  });
260
240
  };