relay-runtime 7.0.0 → 9.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 (157) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +34 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/index.js +1 -1
  5. package/index.js.flow +314 -0
  6. package/lib/handlers/RelayDefaultHandlerProvider.js +3 -2
  7. package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +34 -35
  8. package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +3 -30
  9. package/lib/index.js +29 -27
  10. package/lib/mutations/RelayDeclarativeMutationConfig.js +30 -52
  11. package/lib/mutations/RelayRecordProxy.js +6 -3
  12. package/lib/mutations/RelayRecordSourceMutator.js +3 -9
  13. package/lib/mutations/RelayRecordSourceProxy.js +21 -24
  14. package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -14
  15. package/lib/mutations/applyOptimisticMutation.js +2 -1
  16. package/lib/mutations/commitLocalUpdate.js +1 -0
  17. package/lib/mutations/commitMutation.js +26 -8
  18. package/lib/mutations/validateMutation.js +21 -11
  19. package/lib/network/ConvertToExecuteFunction.js +1 -0
  20. package/lib/network/RelayNetwork.js +1 -0
  21. package/lib/network/RelayNetworkTypes.js +1 -0
  22. package/lib/network/RelayObservable.js +10 -9
  23. package/lib/network/RelayQueryResponseCache.js +9 -7
  24. package/lib/query/{RelayModernGraphQLTag.js → GraphQLTag.js} +15 -8
  25. package/lib/query/fetchQuery.js +2 -1
  26. package/lib/query/fetchQueryInternal.js +30 -20
  27. package/lib/store/ClientID.js +1 -0
  28. package/lib/store/DataChecker.js +47 -97
  29. package/lib/store/RelayConcreteVariables.js +7 -2
  30. package/lib/store/RelayModernEnvironment.js +82 -41
  31. package/lib/store/RelayModernFragmentSpecResolver.js +61 -21
  32. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  33. package/lib/store/RelayModernQueryExecutor.js +476 -333
  34. package/lib/store/RelayModernRecord.js +39 -9
  35. package/lib/store/RelayModernSelector.js +2 -1
  36. package/lib/store/RelayModernStore.js +359 -371
  37. package/lib/store/RelayOperationTracker.js +36 -78
  38. package/lib/store/RelayOptimisticRecordSource.js +8 -5
  39. package/lib/store/RelayPublishQueue.js +66 -53
  40. package/lib/store/RelayReader.js +2 -24
  41. package/lib/store/RelayRecordSource.js +3 -9
  42. package/lib/store/RelayRecordSourceMapImpl.js +14 -18
  43. package/lib/store/RelayRecordState.js +1 -0
  44. package/lib/store/RelayReferenceMarker.js +8 -58
  45. package/lib/store/RelayResponseNormalizer.js +15 -144
  46. package/lib/store/RelayStoreTypes.js +1 -0
  47. package/lib/store/RelayStoreUtils.js +34 -10
  48. package/lib/store/StoreInspector.js +11 -5
  49. package/lib/store/ViewerPattern.js +1 -0
  50. package/lib/store/cloneRelayHandleSourceField.js +1 -0
  51. package/lib/store/createFragmentSpecResolver.js +1 -0
  52. package/lib/store/createRelayContext.js +1 -0
  53. package/lib/store/defaultGetDataID.js +1 -0
  54. package/lib/store/hasOverlappingIDs.js +1 -0
  55. package/lib/store/isRelayModernEnvironment.js +1 -0
  56. package/lib/store/normalizeRelayPayload.js +8 -4
  57. package/lib/store/readInlineData.js +2 -1
  58. package/lib/subscription/requestSubscription.js +6 -3
  59. package/lib/util/JSResourceTypes.flow.js +12 -0
  60. package/lib/util/NormalizationNode.js +1 -0
  61. package/lib/util/ReaderNode.js +1 -0
  62. package/lib/util/RelayConcreteNode.js +3 -0
  63. package/lib/util/RelayDefaultHandleKey.js +1 -0
  64. package/lib/util/RelayError.js +2 -1
  65. package/lib/util/RelayFeatureFlags.js +3 -2
  66. package/lib/util/RelayProfiler.js +1 -0
  67. package/lib/util/RelayReplaySubject.js +2 -3
  68. package/lib/util/RelayRuntimeTypes.js +1 -0
  69. package/lib/util/createPayloadFor3DField.js +34 -0
  70. package/lib/util/deepFreeze.js +1 -0
  71. package/lib/util/generateID.js +1 -0
  72. package/lib/util/getFragmentIdentifier.js +1 -0
  73. package/lib/util/getRelayHandleKey.js +1 -0
  74. package/lib/util/getRequestIdentifier.js +1 -0
  75. package/lib/util/isPromise.js +1 -0
  76. package/lib/util/isScalarAndEqual.js +1 -0
  77. package/lib/util/recycleNodesInto.js +1 -0
  78. package/lib/util/resolveImmediate.js +1 -0
  79. package/lib/util/stableCopy.js +1 -0
  80. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  81. package/mutations/RelayRecordProxy.js.flow +165 -0
  82. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  83. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  84. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  85. package/mutations/applyOptimisticMutation.js.flow +76 -0
  86. package/mutations/commitLocalUpdate.js.flow +24 -0
  87. package/mutations/commitMutation.js.flow +184 -0
  88. package/mutations/validateMutation.js.flow +211 -0
  89. package/network/ConvertToExecuteFunction.js.flow +49 -0
  90. package/network/RelayNetwork.js.flow +84 -0
  91. package/network/RelayNetworkTypes.js.flow +123 -0
  92. package/network/RelayObservable.js.flow +634 -0
  93. package/network/RelayQueryResponseCache.js.flow +111 -0
  94. package/package.json +1 -1
  95. package/query/GraphQLTag.js.flow +166 -0
  96. package/query/fetchQuery.js.flow +47 -0
  97. package/query/fetchQueryInternal.js.flow +349 -0
  98. package/relay-runtime.js +2 -2
  99. package/relay-runtime.min.js +2 -2
  100. package/store/ClientID.js.flow +43 -0
  101. package/store/DataChecker.js.flow +426 -0
  102. package/store/RelayConcreteVariables.js.flow +96 -0
  103. package/store/RelayModernEnvironment.js.flow +526 -0
  104. package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
  105. package/store/RelayModernOperationDescriptor.js.flow +88 -0
  106. package/store/RelayModernQueryExecutor.js.flow +1327 -0
  107. package/store/RelayModernRecord.js.flow +403 -0
  108. package/store/RelayModernSelector.js.flow +444 -0
  109. package/store/RelayModernStore.js.flow +757 -0
  110. package/store/RelayOperationTracker.js.flow +164 -0
  111. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  112. package/store/RelayPublishQueue.js.flow +401 -0
  113. package/store/RelayReader.js.flow +376 -0
  114. package/store/RelayRecordSource.js.flow +29 -0
  115. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  116. package/store/RelayRecordState.js.flow +37 -0
  117. package/store/RelayReferenceMarker.js.flow +236 -0
  118. package/store/RelayResponseNormalizer.js.flow +556 -0
  119. package/store/RelayStoreTypes.js.flow +873 -0
  120. package/store/RelayStoreUtils.js.flow +218 -0
  121. package/store/StoreInspector.js.flow +173 -0
  122. package/store/ViewerPattern.js.flow +26 -0
  123. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  124. package/store/createFragmentSpecResolver.js.flow +55 -0
  125. package/store/createRelayContext.js.flow +44 -0
  126. package/store/defaultGetDataID.js.flow +27 -0
  127. package/store/hasOverlappingIDs.js.flow +34 -0
  128. package/store/isRelayModernEnvironment.js.flow +27 -0
  129. package/store/normalizeRelayPayload.js.flow +51 -0
  130. package/store/readInlineData.js.flow +75 -0
  131. package/subscription/requestSubscription.js.flow +100 -0
  132. package/util/JSResourceTypes.flow.js.flow +20 -0
  133. package/util/NormalizationNode.js.flow +191 -0
  134. package/util/ReaderNode.js.flow +208 -0
  135. package/util/RelayConcreteNode.js.flow +80 -0
  136. package/util/RelayDefaultHandleKey.js.flow +17 -0
  137. package/util/RelayError.js.flow +33 -0
  138. package/util/RelayFeatureFlags.js.flow +30 -0
  139. package/util/RelayProfiler.js.flow +284 -0
  140. package/util/RelayReplaySubject.js.flow +134 -0
  141. package/util/RelayRuntimeTypes.js.flow +70 -0
  142. package/util/createPayloadFor3DField.js.flow +43 -0
  143. package/util/deepFreeze.js.flow +36 -0
  144. package/util/generateID.js.flow +21 -0
  145. package/util/getFragmentIdentifier.js.flow +52 -0
  146. package/util/getRelayHandleKey.js.flow +41 -0
  147. package/util/getRequestIdentifier.js.flow +41 -0
  148. package/util/isPromise.js.flow +21 -0
  149. package/util/isScalarAndEqual.js.flow +26 -0
  150. package/util/recycleNodesInto.js.flow +80 -0
  151. package/util/resolveImmediate.js.flow +30 -0
  152. package/util/stableCopy.js.flow +35 -0
  153. package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
  154. package/lib/store/RelayConnection.js +0 -36
  155. package/lib/store/RelayConnectionResolver.js +0 -177
  156. package/lib/store/RelayRecordSourceObjectImpl.js +0 -78
  157. package/lib/util/getFragmentSpecIdentifier.js +0 -26
@@ -7,13 +7,18 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
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
+
12
19
  var invariant = require("fbjs/lib/invariant");
13
20
 
14
- var RelayOperationTracker =
15
- /*#__PURE__*/
16
- function () {
21
+ var RelayOperationTracker = /*#__PURE__*/function () {
17
22
  function RelayOperationTracker() {
18
23
  this._ownersToPendingOperations = new Map();
19
24
  this._pendingOperationsToOwners = new Map();
@@ -33,12 +38,12 @@ function () {
33
38
  }
34
39
 
35
40
  var newlyAffectedOwners = new Set();
36
- var _iteratorNormalCompletion = true;
37
- var _didIteratorError = false;
38
- var _iteratorError = undefined;
41
+
42
+ var _iterator = _createForOfIteratorHelper(affectedOwners),
43
+ _step;
39
44
 
40
45
  try {
41
- for (var _iterator = affectedOwners[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
46
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
42
47
  var owner = _step.value;
43
48
 
44
49
  var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(owner);
@@ -60,18 +65,9 @@ function () {
60
65
  } // No new owners were affected by this operation, we may stop here
61
66
 
62
67
  } catch (err) {
63
- _didIteratorError = true;
64
- _iteratorError = err;
68
+ _iterator.e(err);
65
69
  } finally {
66
- try {
67
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
68
- _iterator["return"]();
69
- }
70
- } finally {
71
- if (_didIteratorError) {
72
- throw _iteratorError;
73
- }
74
- }
70
+ _iterator.f();
75
71
  }
76
72
 
77
73
  if (newlyAffectedOwners.size === 0) {
@@ -81,12 +77,12 @@ function () {
81
77
 
82
78
 
83
79
  var ownersAffectedByOperation = this._pendingOperationsToOwners.get(pendingOperation) || new Set();
84
- var _iteratorNormalCompletion2 = true;
85
- var _didIteratorError2 = false;
86
- var _iteratorError2 = undefined;
80
+
81
+ var _iterator2 = _createForOfIteratorHelper(newlyAffectedOwners),
82
+ _step2;
87
83
 
88
84
  try {
89
- for (var _iterator2 = newlyAffectedOwners[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
85
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
90
86
  var _owner = _step2.value;
91
87
 
92
88
  this._resolveOwnerResolvers(_owner);
@@ -94,18 +90,9 @@ function () {
94
90
  ownersAffectedByOperation.add(_owner);
95
91
  }
96
92
  } catch (err) {
97
- _didIteratorError2 = true;
98
- _iteratorError2 = err;
93
+ _iterator2.e(err);
99
94
  } finally {
100
- try {
101
- if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
102
- _iterator2["return"]();
103
- }
104
- } finally {
105
- if (_didIteratorError2) {
106
- throw _iteratorError2;
107
- }
108
- }
95
+ _iterator2.f();
109
96
  }
110
97
 
111
98
  this._pendingOperationsToOwners.set(pendingOperation, ownersAffectedByOperation);
@@ -128,12 +115,12 @@ function () {
128
115
  // and some other operations
129
116
 
130
117
  var updatedOwners = new Set();
131
- var _iteratorNormalCompletion3 = true;
132
- var _didIteratorError3 = false;
133
- var _iteratorError3 = undefined;
118
+
119
+ var _iterator3 = _createForOfIteratorHelper(affectedOwners),
120
+ _step3;
134
121
 
135
122
  try {
136
- for (var _iterator3 = affectedOwners[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
123
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
137
124
  var owner = _step3.value;
138
125
 
139
126
  var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(owner);
@@ -152,26 +139,16 @@ function () {
152
139
  } // Complete subscriptions for all owners, affected by `pendingOperation`
153
140
 
154
141
  } catch (err) {
155
- _didIteratorError3 = true;
156
- _iteratorError3 = err;
142
+ _iterator3.e(err);
157
143
  } finally {
158
- try {
159
- if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
160
- _iterator3["return"]();
161
- }
162
- } finally {
163
- if (_didIteratorError3) {
164
- throw _iteratorError3;
165
- }
166
- }
144
+ _iterator3.f();
167
145
  }
168
146
 
169
- var _iteratorNormalCompletion4 = true;
170
- var _didIteratorError4 = false;
171
- var _iteratorError4 = undefined;
147
+ var _iterator4 = _createForOfIteratorHelper(completedOwners),
148
+ _step4;
172
149
 
173
150
  try {
174
- for (var _iterator4 = completedOwners[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
151
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
175
152
  var _owner2 = _step4.value;
176
153
 
177
154
  this._resolveOwnerResolvers(_owner2);
@@ -181,44 +158,25 @@ function () {
181
158
  // are affected by other operations
182
159
 
183
160
  } catch (err) {
184
- _didIteratorError4 = true;
185
- _iteratorError4 = err;
161
+ _iterator4.e(err);
186
162
  } finally {
187
- try {
188
- if (!_iteratorNormalCompletion4 && _iterator4["return"] != null) {
189
- _iterator4["return"]();
190
- }
191
- } finally {
192
- if (_didIteratorError4) {
193
- throw _iteratorError4;
194
- }
195
- }
163
+ _iterator4.f();
196
164
  }
197
165
 
198
- var _iteratorNormalCompletion5 = true;
199
- var _didIteratorError5 = false;
200
- var _iteratorError5 = undefined;
166
+ var _iterator5 = _createForOfIteratorHelper(updatedOwners),
167
+ _step5;
201
168
 
202
169
  try {
203
- for (var _iterator5 = updatedOwners[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
170
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
204
171
  var _owner3 = _step5.value;
205
172
 
206
173
  this._resolveOwnerResolvers(_owner3);
207
174
  } // Finally, remove pending operation
208
175
 
209
176
  } catch (err) {
210
- _didIteratorError5 = true;
211
- _iteratorError5 = err;
177
+ _iterator5.e(err);
212
178
  } finally {
213
- try {
214
- if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) {
215
- _iterator5["return"]();
216
- }
217
- } finally {
218
- if (_didIteratorError5) {
219
- throw _iteratorError5;
220
- }
221
- }
179
+ _iterator5.f();
222
180
  }
223
181
 
224
182
  this._pendingOperationsToOwners["delete"](pendingOperation);
@@ -7,11 +7,16 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
14
 
14
- 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; }
15
20
 
16
21
  var RelayRecordSource = require('./RelayRecordSource');
17
22
 
@@ -24,9 +29,7 @@ var UNPUBLISH_RECORD_SENTINEL = Object.freeze({
24
29
  * shadow the base version of the record rather than updating/replacing them.
25
30
  */
26
31
 
27
- var RelayOptimisticRecordSource =
28
- /*#__PURE__*/
29
- function () {
32
+ var RelayOptimisticRecordSource = /*#__PURE__*/function () {
30
33
  function RelayOptimisticRecordSource(base) {
31
34
  this._base = base;
32
35
  this._sink = RelayRecordSource.create();
@@ -99,7 +102,7 @@ function () {
99
102
  _proto.toJSON = function toJSON() {
100
103
  var _this = this;
101
104
 
102
- var merged = (0, _objectSpread2["default"])({}, this._base.toJSON());
105
+ var merged = _objectSpread({}, this._base.toJSON());
103
106
 
104
107
  this._sink.getRecordIDs().forEach(function (dataID) {
105
108
  var record = _this.get(dataID);
@@ -7,12 +7,9 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
-
14
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
-
16
13
  var ErrorUtils = require("fbjs/lib/ErrorUtils");
17
14
 
18
15
  var RelayReader = require('./RelayReader');
@@ -27,6 +24,8 @@ var RelayRecordSourceSelectorProxy = require('../mutations/RelayRecordSourceSele
27
24
 
28
25
  var invariant = require("fbjs/lib/invariant");
29
26
 
27
+ var warning = require("fbjs/lib/warning");
28
+
30
29
  /**
31
30
  * Coordinates the concurrent modification of a `Store` due to optimistic and
32
31
  * non-revertable client updates and server payloads:
@@ -38,9 +37,7 @@ var invariant = require("fbjs/lib/invariant");
38
37
  * - Executes handlers for "handle" fields.
39
38
  * - Reverts and reapplies pending optimistic updates.
40
39
  */
41
- var RelayPublishQueue =
42
- /*#__PURE__*/
43
- function () {
40
+ var RelayPublishQueue = /*#__PURE__*/function () {
44
41
  // True if the next `run()` should apply the backup and rerun all optimistic
45
42
  // updates performing a rebase.
46
43
  // Payloads to apply or Sources to publish to the store with the next `run()`.
@@ -147,7 +144,12 @@ function () {
147
144
  */
148
145
  ;
149
146
 
150
- _proto.run = function run() {
147
+ _proto.run = function run(sourceOperation) {
148
+ if (process.env.NODE_ENV !== "production") {
149
+ process.env.NODE_ENV !== "production" ? warning(this._isRunning !== true, 'A store update was detected within another store update. Please ' + 'make sure new store updates aren’t being executed within an ' + 'updater function for a different update.') : void 0;
150
+ this._isRunning = true;
151
+ }
152
+
151
153
  if (this._pendingBackupRebase) {
152
154
  if (this._hasStoreSnapshot) {
153
155
  this._store.restore();
@@ -156,7 +158,7 @@ function () {
156
158
  }
157
159
  }
158
160
 
159
- this._commitData();
161
+ var invalidatedStore = this._commitData();
160
162
 
161
163
  if (this._pendingOptimisticUpdates.size || this._pendingBackupRebase && this._appliedOptimisticUpdates.size) {
162
164
  if (!this._hasStoreSnapshot) {
@@ -182,8 +184,17 @@ function () {
182
184
  }
183
185
  }
184
186
 
185
- return this._store.notify();
186
- };
187
+ if (process.env.NODE_ENV !== "production") {
188
+ this._isRunning = false;
189
+ }
190
+
191
+ return this._store.notify(sourceOperation, invalidatedStore);
192
+ }
193
+ /**
194
+ * _publishSourceFromPayload will return a boolean indicating if the
195
+ * publish caused the store to be globally invalidated.
196
+ */
197
+ ;
187
198
 
188
199
  _proto._publishSourceFromPayload = function _publishSourceFromPayload(pendingPayload) {
189
200
  var _this = this;
@@ -191,47 +202,54 @@ function () {
191
202
  var payload = pendingPayload.payload,
192
203
  operation = pendingPayload.operation,
193
204
  updater = pendingPayload.updater;
194
- var connectionEvents = payload.connectionEvents,
195
- source = payload.source,
205
+ var source = payload.source,
196
206
  fieldPayloads = payload.fieldPayloads;
197
- var combinedConnectionEvents = connectionEvents ? connectionEvents.slice() : [];
198
- var mutator = new RelayRecordSourceMutator(this._store.getSource(), source, combinedConnectionEvents);
199
- var store = new RelayRecordSourceProxy(mutator, this._getDataID);
207
+ var mutator = new RelayRecordSourceMutator(this._store.getSource(), source);
208
+ var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID);
200
209
 
201
210
  if (fieldPayloads && fieldPayloads.length) {
202
211
  fieldPayloads.forEach(function (fieldPayload) {
203
212
  var handler = _this._handlerProvider && _this._handlerProvider(fieldPayload.handle);
204
213
 
205
214
  !handler ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected a handler to be provided for ' + 'handle `%s`.', fieldPayload.handle) : invariant(false) : void 0;
206
- handler.update(store, fieldPayload);
215
+ handler.update(recordSourceProxy, fieldPayload);
207
216
  });
208
217
  }
209
218
 
210
219
  if (updater) {
211
220
  var selector = operation.fragment;
212
221
  !(selector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected a selector to be provided with updater function.') : invariant(false) : void 0;
213
- var selectorStore = new RelayRecordSourceSelectorProxy(mutator, store, selector);
222
+ var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, selector);
214
223
  var selectorData = lookupSelector(source, selector);
215
- updater(selectorStore, selectorData);
224
+ updater(recordSourceSelectorProxy, selectorData);
216
225
  }
217
226
 
218
- this._store.publish(source);
227
+ var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
219
228
 
220
- if (combinedConnectionEvents.length !== 0) {
221
- this._store.publishConnectionEvents_UNSTABLE(combinedConnectionEvents, true);
222
- }
223
- };
229
+ this._store.publish(source, idsMarkedForInvalidation);
230
+
231
+ return recordSourceProxy.isStoreMarkedForInvalidation();
232
+ }
233
+ /**
234
+ * _commitData will return a boolean indicating if any of
235
+ * the pending commits caused the store to be globally invalidated.
236
+ */
237
+ ;
224
238
 
225
239
  _proto._commitData = function _commitData() {
226
240
  var _this2 = this;
227
241
 
228
242
  if (!this._pendingData.size) {
229
- return;
243
+ return false;
230
244
  }
231
245
 
246
+ var invalidatedStore = false;
247
+
232
248
  this._pendingData.forEach(function (data) {
233
249
  if (data.kind === 'payload') {
234
- _this2._publishSourceFromPayload(data);
250
+ var payloadInvalidatedStore = _this2._publishSourceFromPayload(data);
251
+
252
+ invalidatedStore = invalidatedStore || payloadInvalidatedStore;
235
253
  } else if (data.kind === 'source') {
236
254
  var source = data.source;
237
255
 
@@ -239,55 +257,54 @@ function () {
239
257
  } else {
240
258
  var updater = data.updater;
241
259
  var sink = RelayRecordSource.create();
242
- var connectionEvents = [];
243
- var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink, connectionEvents);
244
- var store = new RelayRecordSourceProxy(mutator, _this2._getDataID);
245
- ErrorUtils.applyWithGuard(updater, null, [store], null, 'RelayPublishQueue:commitData');
260
+ var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink);
261
+ var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID);
262
+ ErrorUtils.applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
263
+ invalidatedStore = invalidatedStore || recordSourceProxy.isStoreMarkedForInvalidation();
264
+ var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
246
265
 
247
- _this2._store.publish(sink);
248
-
249
- if (connectionEvents.length !== 0) {
250
- _this2._store.publishConnectionEvents_UNSTABLE(connectionEvents, true);
251
- }
266
+ _this2._store.publish(sink, idsMarkedForInvalidation);
252
267
  }
253
268
  });
254
269
 
255
270
  this._pendingData.clear();
256
- };
271
+
272
+ return invalidatedStore;
273
+ }
274
+ /**
275
+ * Note that unlike _commitData, _applyUpdates will NOT return a boolean
276
+ * indicating if the store was globally invalidated, since invalidating the
277
+ * store during an optimistic update is a no-op.
278
+ */
279
+ ;
257
280
 
258
281
  _proto._applyUpdates = function _applyUpdates() {
259
282
  var _this3 = this;
260
283
 
261
284
  var sink = RelayRecordSource.create();
262
- var combinedConnectionEvents = [];
263
- var mutator = new RelayRecordSourceMutator(this._store.getSource(), sink, combinedConnectionEvents);
264
- var store = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider);
285
+ var mutator = new RelayRecordSourceMutator(this._store.getSource(), sink);
286
+ var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider);
265
287
 
266
288
  var processUpdate = function processUpdate(optimisticUpdate) {
267
289
  if (optimisticUpdate.storeUpdater) {
268
290
  var storeUpdater = optimisticUpdate.storeUpdater;
269
- ErrorUtils.applyWithGuard(storeUpdater, null, [store], null, 'RelayPublishQueue:applyUpdates');
291
+ ErrorUtils.applyWithGuard(storeUpdater, null, [recordSourceProxy], null, 'RelayPublishQueue:applyUpdates');
270
292
  } else {
271
293
  var operation = optimisticUpdate.operation,
272
294
  payload = optimisticUpdate.payload,
273
295
  updater = optimisticUpdate.updater;
274
- var connectionEvents = payload.connectionEvents,
275
- source = payload.source,
296
+ var source = payload.source,
276
297
  fieldPayloads = payload.fieldPayloads;
277
- var selectorStore = new RelayRecordSourceSelectorProxy(mutator, store, operation.fragment);
298
+ var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, operation.fragment);
278
299
  var selectorData;
279
300
 
280
301
  if (source) {
281
- store.publishSource(source, fieldPayloads);
302
+ recordSourceProxy.publishSource(source, fieldPayloads);
282
303
  selectorData = lookupSelector(source, operation.fragment);
283
304
  }
284
305
 
285
- if (connectionEvents) {
286
- combinedConnectionEvents.push.apply(combinedConnectionEvents, (0, _toConsumableArray2["default"])(connectionEvents));
287
- }
288
-
289
306
  if (updater) {
290
- ErrorUtils.applyWithGuard(updater, null, [selectorStore, selectorData], null, 'RelayPublishQueue:applyUpdates');
307
+ ErrorUtils.applyWithGuard(updater, null, [recordSourceSelectorProxy, selectorData], null, 'RelayPublishQueue:applyUpdates');
291
308
  }
292
309
  }
293
310
  }; // rerun all updaters in case we are running a rebase
@@ -309,10 +326,6 @@ function () {
309
326
  }
310
327
 
311
328
  this._store.publish(sink);
312
-
313
- if (combinedConnectionEvents.length !== 0) {
314
- this._store.publishConnectionEvents_UNSTABLE(combinedConnectionEvents, false);
315
- }
316
329
  };
317
330
 
318
331
  return RelayPublishQueue;
@@ -7,17 +7,15 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
- var RelayConnection = require('./RelayConnection');
13
-
14
13
  var RelayModernRecord = require('./RelayModernRecord');
15
14
 
16
15
  var invariant = require("fbjs/lib/invariant");
17
16
 
18
17
  var _require = require('../util/RelayConcreteNode'),
19
18
  CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
20
- CONNECTION = _require.CONNECTION,
21
19
  CONDITION = _require.CONDITION,
22
20
  DEFER = _require.DEFER,
23
21
  FRAGMENT_SPREAD = _require.FRAGMENT_SPREAD,
@@ -47,9 +45,7 @@ function read(recordSource, selector) {
47
45
  */
48
46
 
49
47
 
50
- var RelayReader =
51
- /*#__PURE__*/
52
- function () {
48
+ var RelayReader = /*#__PURE__*/function () {
53
49
  function RelayReader(recordSource, selector) {
54
50
  this._isMissingData = false;
55
51
  this._owner = selector.owner;
@@ -162,11 +158,6 @@ function () {
162
158
  this._isMissingData = isMissingData;
163
159
  break;
164
160
 
165
- case CONNECTION:
166
- this._readConnection(selection, record, data);
167
-
168
- break;
169
-
170
161
  case STREAM:
171
162
  this._traverseSelections(selection.selections, record, data);
172
163
 
@@ -179,19 +170,6 @@ function () {
179
170
  }
180
171
  };
181
172
 
182
- _proto._readConnection = function _readConnection(field, record, data) {
183
- var parentID = RelayModernRecord.getDataID(record);
184
- var connectionID = RelayConnection.createConnectionID(parentID, field.label);
185
- var edgesField = field.edges;
186
- var reference = {
187
- variables: this._variables,
188
- edgesField: edgesField,
189
- id: connectionID,
190
- label: field.label
191
- };
192
- data[RelayConnection.CONNECTION_KEY] = reference;
193
- };
194
-
195
173
  _proto._readScalar = function _readScalar(field, record, data) {
196
174
  var _field$alias;
197
175
 
@@ -7,24 +7,18 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
- var RelayFeatureFlags = require('../util/RelayFeatureFlags');
13
-
14
13
  var RelayRecordSourceMapImpl = require('./RelayRecordSourceMapImpl');
15
14
 
16
- var RelayRecordSourceObjectImpl = require('./RelayRecordSourceObjectImpl');
17
-
18
- var RelayRecordSource =
19
- /*#__PURE__*/
20
- function () {
15
+ var RelayRecordSource = /*#__PURE__*/function () {
21
16
  function RelayRecordSource(records) {
22
17
  return RelayRecordSource.create(records);
23
18
  }
24
19
 
25
20
  RelayRecordSource.create = function create(records) {
26
- var RecordSourceImpl = RelayFeatureFlags.USE_RECORD_SOURCE_MAP_IMPL ? RelayRecordSourceMapImpl : RelayRecordSourceObjectImpl;
27
- return new RecordSourceImpl(records);
21
+ return new RelayRecordSourceMapImpl(records);
28
22
  };
29
23
 
30
24
  return RelayRecordSource;
@@ -7,8 +7,15 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
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
+
12
19
  var RelayRecordState = require('./RelayRecordState');
13
20
 
14
21
  var EXISTENT = RelayRecordState.EXISTENT,
@@ -19,9 +26,7 @@ var EXISTENT = RelayRecordState.EXISTENT,
19
26
  * `RelayStoreTypes`) that holds all records in memory (JS Map).
20
27
  */
21
28
 
22
- var RelayMapRecordSourceMapImpl =
23
- /*#__PURE__*/
24
- function () {
29
+ var RelayMapRecordSourceMapImpl = /*#__PURE__*/function () {
25
30
  function RelayMapRecordSourceMapImpl(records) {
26
31
  var _this = this;
27
32
 
@@ -78,30 +83,21 @@ function () {
78
83
 
79
84
  _proto.toJSON = function toJSON() {
80
85
  var obj = {};
81
- var _iteratorNormalCompletion = true;
82
- var _didIteratorError = false;
83
- var _iteratorError = undefined;
86
+
87
+ var _iterator = _createForOfIteratorHelper(this._records),
88
+ _step;
84
89
 
85
90
  try {
86
- for (var _iterator = this._records[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
91
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
87
92
  var _step$value = _step.value,
88
93
  key = _step$value[0],
89
94
  value = _step$value[1];
90
95
  obj[key] = value;
91
96
  }
92
97
  } catch (err) {
93
- _didIteratorError = true;
94
- _iteratorError = err;
98
+ _iterator.e(err);
95
99
  } finally {
96
- try {
97
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
98
- _iterator["return"]();
99
- }
100
- } finally {
101
- if (_didIteratorError) {
102
- throw _iteratorError;
103
- }
104
- }
100
+ _iterator.f();
105
101
  }
106
102
 
107
103
  return obj;
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var RelayRecordState = {