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
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
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
+
19
+ var ConnectionHandler = require('./ConnectionHandler');
20
+
21
+ var invariant = require("fbjs/lib/invariant");
22
+
23
+ var warning = require("fbjs/lib/warning");
24
+
25
+ var DeleteRecordHandler = {
26
+ update: function update(store, payload) {
27
+ var record = store.get(payload.dataID);
28
+
29
+ if (record != null) {
30
+ var id = record.getValue(payload.fieldKey);
31
+
32
+ if (typeof id === 'string') {
33
+ store["delete"](id);
34
+ }
35
+ }
36
+ }
37
+ };
38
+ var AppendEdgeHandler = {
39
+ update: edgeUpdater(ConnectionHandler.insertEdgeAfter)
40
+ };
41
+ var PrependEdgeHandler = {
42
+ update: edgeUpdater(ConnectionHandler.insertEdgeBefore)
43
+ };
44
+
45
+ function edgeUpdater(insertFn) {
46
+ return function (store, payload) {
47
+ var record = store.get(payload.dataID);
48
+
49
+ if (record == null) {
50
+ return;
51
+ }
52
+
53
+ var connections = payload.handleArgs.connections;
54
+ !(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0;
55
+ var serverEdge = record.getLinkedRecord(payload.fieldKey, payload.args);
56
+
57
+ var _iterator = _createForOfIteratorHelper(connections),
58
+ _step;
59
+
60
+ try {
61
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
62
+ var connectionID = _step.value;
63
+ var connection = store.get(connectionID);
64
+
65
+ if (connection == null) {
66
+ process.env.NODE_ENV !== "production" ? warning(false, "[Relay][Mutation] The connection with id '".concat(connectionID, "' doesn't exist.")) : void 0;
67
+ continue;
68
+ }
69
+
70
+ var clientEdge = ConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
71
+ !(clientEdge != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Failed to build the edge.') : invariant(false) : void 0;
72
+ insertFn(connection, clientEdge);
73
+ }
74
+ } catch (err) {
75
+ _iterator.e(err);
76
+ } finally {
77
+ _iterator.f();
78
+ }
79
+ };
80
+ }
81
+
82
+ module.exports = {
83
+ AppendEdgeHandler: AppendEdgeHandler,
84
+ DeleteRecordHandler: DeleteRecordHandler,
85
+ PrependEdgeHandler: PrependEdgeHandler
86
+ };
package/lib/index.js CHANGED
@@ -10,17 +10,19 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var GraphQLTag = require('./query/GraphQLTag');
13
+ var ConnectionHandler = require('./handlers/connection/ConnectionHandler');
14
14
 
15
- var RelayConcreteNode = require('./util/RelayConcreteNode');
15
+ var ConnectionInterface = require('./handlers/connection/ConnectionInterface');
16
16
 
17
- var RelayConcreteVariables = require('./store/RelayConcreteVariables');
17
+ var GraphQLTag = require('./query/GraphQLTag');
18
18
 
19
- var RelayConnectionHandler = require('./handlers/connection/RelayConnectionHandler');
19
+ var MutationHandlers = require('./handlers/connection/MutationHandlers');
20
20
 
21
- var RelayConnectionInterface = require('./handlers/connection/RelayConnectionInterface');
21
+ var PreloadableQueryRegistry = require('./query/PreloadableQueryRegistry');
22
22
 
23
- var RelayConnectionResolver = require('./store/RelayConnectionResolver');
23
+ var RelayConcreteNode = require('./util/RelayConcreteNode');
24
+
25
+ var RelayConcreteVariables = require('./store/RelayConcreteVariables');
24
26
 
25
27
  var RelayDeclarativeMutationConfig = require('./mutations/RelayDeclarativeMutationConfig');
26
28
 
@@ -80,10 +82,6 @@ var fetchQueryInternal = require('./query/fetchQueryInternal');
80
82
 
81
83
  var getFragmentIdentifier = require('./util/getFragmentIdentifier');
82
84
 
83
- var getFragmentSpecIdentifier = require('./util/getFragmentSpecIdentifier');
84
-
85
- var getRelayDefaultMissingFieldHandlers = require('./handlers/getRelayDefaultMissingFieldHandlers');
86
-
87
85
  var getRelayHandleKey = require('./util/getRelayHandleKey');
88
86
 
89
87
  var getRequestIdentifier = require('./util/getRequestIdentifier');
@@ -165,10 +163,9 @@ module.exports = {
165
163
  MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
166
164
  RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
167
165
  // Extensions
168
- getDefaultMissingFieldHandlers: getRelayDefaultMissingFieldHandlers,
169
166
  DefaultHandlerProvider: RelayDefaultHandlerProvider,
170
- ConnectionHandler: RelayConnectionHandler,
171
- ConnectionResolver_UNSTABLE: RelayConnectionResolver,
167
+ ConnectionHandler: ConnectionHandler,
168
+ MutationHandlers: MutationHandlers,
172
169
  VIEWER_ID: ViewerPattern.VIEWER_ID,
173
170
  VIEWER_TYPE: ViewerPattern.VIEWER_TYPE,
174
171
  // Helpers (can be implemented via the above API)
@@ -179,8 +176,9 @@ module.exports = {
179
176
  isRelayModernEnvironment: isRelayModernEnvironment,
180
177
  requestSubscription: requestSubscription,
181
178
  // Configuration interface for legacy or special uses
182
- ConnectionInterface: RelayConnectionInterface,
179
+ ConnectionInterface: ConnectionInterface,
183
180
  // Utilities
181
+ PreloadableQueryRegistry: PreloadableQueryRegistry,
184
182
  RelayProfiler: RelayProfiler,
185
183
  createPayloadFor3DField: createPayloadFor3DField,
186
184
  // INTERNAL-ONLY: These exports might be removed at any point.
@@ -206,15 +204,13 @@ module.exports = {
206
204
  recycleNodesInto: recycleNodesInto,
207
205
  stableCopy: stableCopy,
208
206
  getFragmentIdentifier: getFragmentIdentifier,
209
- getFragmentSpecIdentifier: getFragmentSpecIdentifier,
210
207
  __internal: {
211
208
  OperationTracker: RelayOperationTracker,
212
209
  createRelayContext: createRelayContext,
213
- getModernOperationVariables: RelayConcreteVariables.getOperationVariables,
210
+ getOperationVariables: RelayConcreteVariables.getOperationVariables,
214
211
  fetchQuery: fetchQueryInternal.fetchQuery,
215
212
  fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
216
- getPromiseForRequestInFlight: fetchQueryInternal.getPromiseForRequestInFlight,
217
- getObservableForRequestInFlight: fetchQueryInternal.getObservableForRequestInFlight,
218
- hasRequestInFlight: fetchQueryInternal.hasRequestInFlight
213
+ getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
214
+ getObservableForActiveRequest: fetchQueryInternal.getObservableForActiveRequest
219
215
  }
220
216
  };
@@ -10,7 +10,13 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var RelayConnectionHandler = require('../handlers/connection/RelayConnectionHandler');
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
+
19
+ var ConnectionHandler = require('../handlers/connection/ConnectionHandler');
14
20
 
15
21
  var warning = require("fbjs/lib/warning");
16
22
 
@@ -129,25 +135,25 @@ function rangeAdd(config, request) {
129
135
  }
130
136
 
131
137
  var serverEdge = payload.getLinkedRecord(edgeName);
132
- var _iteratorNormalCompletion = true;
133
- var _didIteratorError = false;
134
- var _iteratorError = undefined;
138
+
139
+ var _iterator = _createForOfIteratorHelper(connectionInfo),
140
+ _step;
135
141
 
136
142
  try {
137
- for (var _iterator = connectionInfo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
143
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
138
144
  var info = _step.value;
139
145
 
140
146
  if (!serverEdge) {
141
147
  continue;
142
148
  }
143
149
 
144
- var connection = RelayConnectionHandler.getConnection(parent, info.key, info.filters);
150
+ var connection = ConnectionHandler.getConnection(parent, info.key, info.filters);
145
151
 
146
152
  if (!connection) {
147
153
  continue;
148
154
  }
149
155
 
150
- var clientEdge = RelayConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
156
+ var clientEdge = ConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
151
157
 
152
158
  if (!clientEdge) {
153
159
  continue;
@@ -155,11 +161,11 @@ function rangeAdd(config, request) {
155
161
 
156
162
  switch (info.rangeBehavior) {
157
163
  case 'append':
158
- RelayConnectionHandler.insertEdgeAfter(connection, clientEdge);
164
+ ConnectionHandler.insertEdgeAfter(connection, clientEdge);
159
165
  break;
160
166
 
161
167
  case 'prepend':
162
- RelayConnectionHandler.insertEdgeBefore(connection, clientEdge);
168
+ ConnectionHandler.insertEdgeBefore(connection, clientEdge);
163
169
  break;
164
170
 
165
171
  default:
@@ -168,18 +174,9 @@ function rangeAdd(config, request) {
168
174
  }
169
175
  }
170
176
  } catch (err) {
171
- _didIteratorError = true;
172
- _iteratorError = err;
177
+ _iterator.e(err);
173
178
  } finally {
174
- try {
175
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
176
- _iterator["return"]();
177
- }
178
- } finally {
179
- if (_didIteratorError) {
180
- throw _iteratorError;
181
- }
182
- }
179
+ _iterator.f();
183
180
  }
184
181
  };
185
182
  }
@@ -210,12 +207,11 @@ function rangeDelete(config, request) {
210
207
  var deletedIDField = data[rootField];
211
208
 
212
209
  if (deletedIDField && Array.isArray(deletedIDFieldName)) {
213
- var _iteratorNormalCompletion2 = true;
214
- var _didIteratorError2 = false;
215
- var _iteratorError2 = undefined;
210
+ var _iterator2 = _createForOfIteratorHelper(deletedIDFieldName),
211
+ _step2;
216
212
 
217
213
  try {
218
- for (var _iterator2 = deletedIDFieldName[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
214
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
219
215
  var eachField = _step2.value;
220
216
 
221
217
  if (deletedIDField && typeof deletedIDField === 'object') {
@@ -223,18 +219,9 @@ function rangeDelete(config, request) {
223
219
  }
224
220
  }
225
221
  } catch (err) {
226
- _didIteratorError2 = true;
227
- _iteratorError2 = err;
222
+ _iterator2.e(err);
228
223
  } finally {
229
- try {
230
- if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
231
- _iterator2["return"]();
232
- }
233
- } finally {
234
- if (_didIteratorError2) {
235
- throw _iteratorError2;
236
- }
237
- }
224
+ _iterator2.f();
238
225
  }
239
226
 
240
227
  if (Array.isArray(deletedIDField)) {
@@ -291,38 +278,28 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
291
278
  return;
292
279
  }
293
280
 
294
- var _iteratorNormalCompletion3 = true;
295
- var _didIteratorError3 = false;
296
- var _iteratorError3 = undefined;
281
+ var _iterator3 = _createForOfIteratorHelper(connectionKeys),
282
+ _step3;
297
283
 
298
284
  try {
299
285
  var _loop = function _loop() {
300
286
  var key = _step3.value;
301
- var connection = RelayConnectionHandler.getConnection(recordProxy, key.key, key.filters);
287
+ var connection = ConnectionHandler.getConnection(recordProxy, key.key, key.filters);
302
288
 
303
289
  if (connection) {
304
290
  deleteIDs.forEach(function (deleteID) {
305
- RelayConnectionHandler.deleteNode(connection, deleteID);
291
+ ConnectionHandler.deleteNode(connection, deleteID);
306
292
  });
307
293
  }
308
294
  };
309
295
 
310
- for (var _iterator3 = connectionKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
296
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
311
297
  _loop();
312
298
  }
313
299
  } catch (err) {
314
- _didIteratorError3 = true;
315
- _iteratorError3 = err;
300
+ _iterator3.e(err);
316
301
  } finally {
317
- try {
318
- if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
319
- _iterator3["return"]();
320
- }
321
- } finally {
322
- if (_didIteratorError3) {
323
- throw _iteratorError3;
324
- }
325
- }
302
+ _iterator3.f();
326
303
  }
327
304
  }
328
305
 
@@ -24,9 +24,7 @@ var _require2 = require('../store/RelayStoreUtils'),
24
24
  * A helper class for manipulating a given record from a record source via an
25
25
  * imperative/OO-style API.
26
26
  */
27
- var RelayRecordProxy =
28
- /*#__PURE__*/
29
- function () {
27
+ var RelayRecordProxy = /*#__PURE__*/function () {
30
28
  function RelayRecordProxy(source, mutator, dataID) {
31
29
  this._dataID = dataID;
32
30
  this._mutator = mutator;
@@ -29,13 +29,10 @@ var _require = require('../store/RelayRecordState'),
29
29
  * - Modifications cause a fresh version of a record to be created in `sink`.
30
30
  * These sink records contain only modified fields.
31
31
  */
32
- var RelayRecordSourceMutator =
33
- /*#__PURE__*/
34
- function () {
35
- function RelayRecordSourceMutator(base, sink, connectionEvents) {
32
+ var RelayRecordSourceMutator = /*#__PURE__*/function () {
33
+ function RelayRecordSourceMutator(base, sink) {
36
34
  this.__sources = [sink, base];
37
35
  this._base = base;
38
- this._connectionEvents = connectionEvents;
39
36
  this._sink = sink;
40
37
  }
41
38
  /**
@@ -223,10 +220,6 @@ function () {
223
220
  RelayModernRecord.setLinkedRecordIDs(sinkRecord, storageKey, linkedIDs);
224
221
  };
225
222
 
226
- _proto.appendConnectionEvent_UNSTABLE = function appendConnectionEvent_UNSTABLE(event) {
227
- this._connectionEvents.push(event);
228
- };
229
-
230
223
  return RelayRecordSourceMutator;
231
224
  }();
232
225
 
@@ -29,9 +29,7 @@ var _require2 = require('../store/RelayStoreUtils'),
29
29
  *
30
30
  * A helper for manipulating a `RecordSource` via an imperative/OO-style API.
31
31
  */
32
- var RelayRecordSourceProxy =
33
- /*#__PURE__*/
34
- function () {
32
+ var RelayRecordSourceProxy = /*#__PURE__*/function () {
35
33
  function RelayRecordSourceProxy(mutator, getDataID, handlerProvider) {
36
34
  this.__mutator = mutator;
37
35
  this._handlerProvider = handlerProvider || null;
@@ -113,7 +111,7 @@ function () {
113
111
  root = this.create(ROOT_ID, ROOT_TYPE);
114
112
  }
115
113
 
116
- !(root && root.getType() === ROOT_TYPE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#getRoot(): Expected the source to contain a ' + 'root record.') : invariant(false) : void 0;
114
+ !(root && root.getType() === ROOT_TYPE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#getRoot(): Expected the source to contain a ' + 'root record, %s.', root == null ? 'no root record found' : "found a root record of type `".concat(root.getType(), "`")) : invariant(false) : void 0;
117
115
  return root;
118
116
  };
119
117
 
@@ -24,9 +24,7 @@ var _require = require('../store/RelayStoreUtils'),
24
24
  * complex arguments and it can be tedious to re-construct the correct sets of
25
25
  * arguments to pass to e.g. `getRoot().getLinkedRecord()`.
26
26
  */
27
- var RelayRecordSourceSelectorProxy =
28
- /*#__PURE__*/
29
- function () {
27
+ var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
30
28
  function RelayRecordSourceSelectorProxy(mutator, recordSource, readSelector) {
31
29
  this.__mutator = mutator;
32
30
  this.__recordSource = recordSource;
@@ -84,16 +82,6 @@ function () {
84
82
  return this.getOperationRoot().getLinkedRecords(storageKey);
85
83
  };
86
84
 
87
- _proto.insertConnectionEdge_UNSTABLE = function insertConnectionEdge_UNSTABLE(connectionID, args, edge) {
88
- this.__mutator.appendConnectionEvent_UNSTABLE({
89
- kind: 'insert',
90
- args: args,
91
- connectionID: connectionID,
92
- edgeID: edge.getDataID(),
93
- request: this._readSelector.owner
94
- });
95
- };
96
-
97
85
  _proto.invalidateStore = function invalidateStore() {
98
86
  this.__recordSource.invalidateStore();
99
87
  };
@@ -55,11 +55,12 @@ function commitMutation(environment, config) {
55
55
  optimisticUpdater = config.optimisticUpdater,
56
56
  updater = config.updater;
57
57
  var configs = config.configs,
58
+ cacheConfig = config.cacheConfig,
58
59
  onError = config.onError,
59
60
  onUnsubscribe = config.onUnsubscribe,
60
61
  variables = config.variables,
61
62
  uploadables = config.uploadables;
62
- var operation = createOperationDescriptor(mutation, variables, RelayFeatureFlags.ENABLE_UNIQUE_MUTATION_ROOT ? generateUniqueClientID() : undefined); // TODO: remove this check after we fix flow.
63
+ var operation = createOperationDescriptor(mutation, variables, generateUniqueClientID()); // TODO: remove this check after we fix flow.
63
64
 
64
65
  if (typeof optimisticResponse === 'function') {
65
66
  optimisticResponse = optimisticResponse();
@@ -81,6 +82,7 @@ function commitMutation(environment, config) {
81
82
 
82
83
  var errors = [];
83
84
  var subscription = environment.executeMutation({
85
+ cacheConfig: cacheConfig,
84
86
  operation: operation,
85
87
  optimisticResponse: optimisticResponse,
86
88
  optimisticUpdater: optimisticUpdater,
@@ -88,8 +90,16 @@ function commitMutation(environment, config) {
88
90
  uploadables: uploadables
89
91
  }).subscribe({
90
92
  next: function next(payload) {
91
- if (payload.errors) {
92
- errors.push.apply(errors, (0, _toConsumableArray2["default"])(payload.errors));
93
+ if (Array.isArray(payload)) {
94
+ payload.forEach(function (item) {
95
+ if (item.errors) {
96
+ errors.push.apply(errors, (0, _toConsumableArray2["default"])(item.errors));
97
+ }
98
+ });
99
+ } else {
100
+ if (payload.errors) {
101
+ errors.push.apply(errors, (0, _toConsumableArray2["default"])(payload.errors));
102
+ }
93
103
  }
94
104
  },
95
105
  complete: function complete() {
@@ -12,7 +12,11 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
20
 
17
21
  var warning = require("fbjs/lib/warning");
18
22
 
@@ -67,8 +71,9 @@ if (process.env.NODE_ENV !== "production") {
67
71
 
68
72
  case 'InlineFragment':
69
73
  var type = selection.type;
74
+ var isConcreteType = selection.abstractKey == null;
70
75
  selection.selections.forEach(function (subselection) {
71
- if (optimisticResponse.__typename !== type) {
76
+ if (isConcreteType && optimisticResponse.__typename !== type) {
72
77
  return;
73
78
  }
74
79
 
@@ -76,16 +81,18 @@ if (process.env.NODE_ENV !== "production") {
76
81
  });
77
82
  return;
78
83
 
79
- case 'Connection':
80
- validateSelections(optimisticResponse, [selection.edges, selection.pageInfo], context);
81
- break;
82
-
83
84
  case 'ClientExtension':
85
+ selection.selections.forEach(function (subselection) {
86
+ validateSelection(optimisticResponse, subselection, context);
87
+ });
88
+ return;
89
+
84
90
  case 'ModuleImport':
85
91
  case 'LinkedHandle':
86
92
  case 'ScalarHandle':
87
93
  case 'Defer':
88
94
  case 'Stream':
95
+ case 'TypeDiscriminator':
89
96
  {
90
97
  // TODO(T35864292) - Add missing validations for these types
91
98
  return;
@@ -121,7 +128,7 @@ if (process.env.NODE_ENV !== "production") {
121
128
  if (Array.isArray(optimisticResponse[fieldName])) {
122
129
  optimisticResponse[fieldName].forEach(function (r) {
123
130
  if (r !== null) {
124
- validateSelections(r, selections, (0, _objectSpread2["default"])({}, context, {
131
+ validateSelections(r, selections, _objectSpread({}, context, {
125
132
  path: path
126
133
  }));
127
134
  }
@@ -133,7 +140,7 @@ if (process.env.NODE_ENV !== "production") {
133
140
  }
134
141
  } else {
135
142
  if (optimisticResponse[fieldName] instanceof Object) {
136
- validateSelections(optimisticResponse[fieldName], selections, (0, _objectSpread2["default"])({}, context, {
143
+ validateSelections(optimisticResponse[fieldName], selections, _objectSpread({}, context, {
137
144
  path: path
138
145
  }));
139
146
  return;
@@ -166,7 +173,7 @@ if (process.env.NODE_ENV !== "production") {
166
173
  }
167
174
 
168
175
  if (value instanceof Object) {
169
- validateOptimisticResponse(value, (0, _objectSpread2["default"])({}, context, {
176
+ validateOptimisticResponse(value, _objectSpread({}, context, {
170
177
  path: path
171
178
  }));
172
179
  }
@@ -30,9 +30,7 @@ var hostReportError = swallowError;
30
30
  * ESObservable: https://github.com/tc39/proposal-observable
31
31
  */
32
32
 
33
- var RelayObservable =
34
- /*#__PURE__*/
35
- function () {
33
+ var RelayObservable = /*#__PURE__*/function () {
36
34
  RelayObservable.create = function create(source) {
37
35
  return new RelayObservable(source);
38
36
  } // Use RelayObservable.create()
@@ -408,6 +406,9 @@ function () {
408
406
  /**
409
407
  * Returns a Promise which resolves when this Observable yields a first value
410
408
  * or when it completes with no value.
409
+ *
410
+ * NOTE: The source Observable is *NOT* canceled when the returned Promise
411
+ * resolves. The Observable is always run to completion.
411
412
  */
412
413
  ;
413
414
 
@@ -415,15 +416,14 @@ function () {
415
416
  var _this9 = this;
416
417
 
417
418
  return new Promise(function (resolve, reject) {
418
- var subscription;
419
+ var resolved = false;
419
420
 
420
421
  _this9.subscribe({
421
- start: function start(sub) {
422
- subscription = sub;
423
- },
424
422
  next: function next(val) {
425
- resolve(val);
426
- subscription.unsubscribe();
423
+ if (!resolved) {
424
+ resolved = true;
425
+ resolve(val);
426
+ }
427
427
  },
428
428
  error: reject,
429
429
  complete: resolve
@@ -12,7 +12,11 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
16
20
 
17
21
  var invariant = require("fbjs/lib/invariant");
18
22
 
@@ -23,9 +27,7 @@ var stableCopy = require('../util/stableCopy');
23
27
  * - `get` with TTL
24
28
  * - cache size limiting, with least-recently *updated* entries purged first
25
29
  */
26
- var RelayQueryResponseCache =
27
- /*#__PURE__*/
28
- function () {
30
+ var RelayQueryResponseCache = /*#__PURE__*/function () {
29
31
  function RelayQueryResponseCache(_ref) {
30
32
  var size = _ref.size,
31
33
  ttl = _ref.ttl;
@@ -55,8 +57,8 @@ function () {
55
57
 
56
58
  var response = this._responses.get(cacheKey);
57
59
 
58
- return response != null ? (0, _objectSpread2["default"])({}, response.payload, {
59
- extensions: (0, _objectSpread2["default"])({}, response.payload.extensions, {
60
+ return response != null ? _objectSpread({}, response.payload, {
61
+ extensions: _objectSpread({}, response.payload.extensions, {
60
62
  cacheTimestamp: response.fetchTime
61
63
  })
62
64
  }) : null;