relay-runtime 11.0.0 → 13.0.0-rc.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 (169) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +2 -2
  2. package/handlers/connection/ConnectionHandler.js.flow +8 -10
  3. package/handlers/connection/MutationHandlers.js.flow +31 -7
  4. package/index.js +1 -1
  5. package/index.js.flow +60 -36
  6. package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
  7. package/lib/handlers/connection/ConnectionHandler.js +8 -8
  8. package/lib/handlers/connection/MutationHandlers.js +61 -5
  9. package/lib/index.js +58 -43
  10. package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
  11. package/lib/multi-actor-environment/ActorSpecificEnvironment.js +152 -0
  12. package/lib/multi-actor-environment/ActorUtils.js +27 -0
  13. package/lib/multi-actor-environment/MultiActorEnvironment.js +419 -0
  14. package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
  15. package/lib/multi-actor-environment/index.js +21 -0
  16. package/lib/mutations/RelayDeclarativeMutationConfig.js +4 -1
  17. package/lib/mutations/RelayRecordProxy.js +3 -2
  18. package/lib/mutations/RelayRecordSourceMutator.js +3 -2
  19. package/lib/mutations/RelayRecordSourceProxy.js +12 -4
  20. package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -5
  21. package/lib/mutations/applyOptimisticMutation.js +6 -6
  22. package/lib/mutations/commitMutation.js +14 -10
  23. package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +238 -0
  24. package/lib/mutations/validateMutation.js +12 -5
  25. package/lib/network/ConvertToExecuteFunction.js +2 -1
  26. package/lib/network/RelayNetwork.js +3 -2
  27. package/lib/network/RelayQueryResponseCache.js +21 -4
  28. package/lib/network/wrapNetworkWithLogObserver.js +79 -0
  29. package/lib/query/GraphQLTag.js +3 -2
  30. package/lib/query/fetchQuery.js +6 -5
  31. package/lib/query/fetchQueryInternal.js +1 -1
  32. package/lib/query/fetchQuery_DEPRECATED.js +2 -1
  33. package/lib/store/ClientID.js +7 -1
  34. package/lib/store/DataChecker.js +141 -60
  35. package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +532 -195
  36. package/lib/store/RelayConcreteVariables.js +24 -4
  37. package/lib/store/RelayModernEnvironment.js +175 -234
  38. package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
  39. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  40. package/lib/store/RelayModernRecord.js +47 -12
  41. package/lib/store/RelayModernSelector.js +14 -8
  42. package/lib/store/RelayModernStore.js +58 -29
  43. package/lib/store/RelayOperationTracker.js +34 -24
  44. package/lib/store/RelayPublishQueue.js +41 -13
  45. package/lib/store/RelayReader.js +287 -46
  46. package/lib/store/RelayRecordSource.js +87 -3
  47. package/lib/store/RelayReferenceMarker.js +55 -31
  48. package/lib/store/RelayResponseNormalizer.js +250 -108
  49. package/lib/store/RelayStoreReactFlightUtils.js +8 -12
  50. package/lib/store/RelayStoreSubscriptions.js +14 -9
  51. package/lib/store/RelayStoreUtils.js +11 -5
  52. package/lib/store/ResolverCache.js +213 -0
  53. package/lib/store/ResolverFragments.js +61 -0
  54. package/lib/store/cloneRelayHandleSourceField.js +5 -4
  55. package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
  56. package/lib/store/createRelayContext.js +4 -2
  57. package/lib/store/defaultGetDataID.js +3 -1
  58. package/lib/store/readInlineData.js +6 -2
  59. package/lib/subscription/requestSubscription.js +35 -9
  60. package/lib/util/RelayConcreteNode.js +4 -0
  61. package/lib/util/RelayFeatureFlags.js +11 -4
  62. package/lib/util/RelayProfiler.js +17 -187
  63. package/lib/util/RelayReplaySubject.js +22 -7
  64. package/lib/util/RelayRuntimeTypes.js +0 -6
  65. package/lib/util/StringInterner.js +71 -0
  66. package/lib/util/deepFreeze.js +1 -0
  67. package/lib/util/getFragmentIdentifier.js +15 -7
  68. package/lib/util/getOperation.js +2 -1
  69. package/lib/util/getPaginationMetadata.js +41 -0
  70. package/lib/util/getPaginationVariables.js +66 -0
  71. package/lib/util/getPendingOperationsForFragment.js +55 -0
  72. package/lib/util/getRefetchMetadata.js +36 -0
  73. package/lib/util/getRelayHandleKey.js +2 -2
  74. package/lib/util/getRequestIdentifier.js +2 -2
  75. package/lib/util/getValueAtPath.js +51 -0
  76. package/lib/util/isEmptyObject.js +1 -1
  77. package/lib/util/registerEnvironmentWithDevTools.js +26 -0
  78. package/lib/util/withDuration.js +31 -0
  79. package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
  80. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +225 -0
  81. package/multi-actor-environment/ActorUtils.js.flow +33 -0
  82. package/multi-actor-environment/MultiActorEnvironment.js.flow +506 -0
  83. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +261 -0
  84. package/multi-actor-environment/index.js.flow +26 -0
  85. package/mutations/RelayDeclarativeMutationConfig.js.flow +32 -26
  86. package/mutations/RelayRecordProxy.js.flow +4 -5
  87. package/mutations/RelayRecordSourceMutator.js.flow +4 -6
  88. package/mutations/RelayRecordSourceProxy.js.flow +19 -10
  89. package/mutations/RelayRecordSourceSelectorProxy.js.flow +22 -7
  90. package/mutations/applyOptimisticMutation.js.flow +13 -14
  91. package/mutations/commitLocalUpdate.js.flow +1 -1
  92. package/mutations/commitMutation.js.flow +35 -46
  93. package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +309 -0
  94. package/mutations/validateMutation.js.flow +28 -16
  95. package/network/ConvertToExecuteFunction.js.flow +2 -2
  96. package/network/RelayNetwork.js.flow +4 -5
  97. package/network/RelayNetworkTypes.js.flow +17 -8
  98. package/network/RelayObservable.js.flow +1 -1
  99. package/network/RelayQueryResponseCache.js.flow +34 -20
  100. package/network/wrapNetworkWithLogObserver.js.flow +100 -0
  101. package/package.json +3 -2
  102. package/query/GraphQLTag.js.flow +9 -9
  103. package/query/PreloadableQueryRegistry.js.flow +2 -1
  104. package/query/fetchQuery.js.flow +11 -13
  105. package/query/fetchQueryInternal.js.flow +6 -9
  106. package/query/fetchQuery_DEPRECATED.js.flow +6 -6
  107. package/relay-runtime.js +2 -2
  108. package/relay-runtime.min.js +2 -2
  109. package/store/ClientID.js.flow +14 -3
  110. package/store/DataChecker.js.flow +162 -67
  111. package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +616 -283
  112. package/store/RelayConcreteVariables.js.flow +27 -5
  113. package/store/RelayModernEnvironment.js.flow +176 -235
  114. package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
  115. package/store/RelayModernOperationDescriptor.js.flow +12 -7
  116. package/store/RelayModernRecord.js.flow +67 -11
  117. package/store/RelayModernSelector.js.flow +24 -14
  118. package/store/RelayModernStore.js.flow +72 -36
  119. package/store/RelayOperationTracker.js.flow +59 -43
  120. package/store/RelayOptimisticRecordSource.js.flow +2 -2
  121. package/store/RelayPublishQueue.js.flow +79 -34
  122. package/store/RelayReader.js.flow +351 -72
  123. package/store/RelayRecordSource.js.flow +72 -6
  124. package/store/RelayReferenceMarker.js.flow +60 -33
  125. package/store/RelayResponseNormalizer.js.flow +288 -102
  126. package/store/RelayStoreReactFlightUtils.js.flow +9 -13
  127. package/store/RelayStoreSubscriptions.js.flow +19 -11
  128. package/store/RelayStoreTypes.js.flow +210 -44
  129. package/store/RelayStoreUtils.js.flow +25 -11
  130. package/store/ResolverCache.js.flow +249 -0
  131. package/store/ResolverFragments.js.flow +121 -0
  132. package/store/StoreInspector.js.flow +2 -2
  133. package/store/TypeID.js.flow +1 -1
  134. package/store/ViewerPattern.js.flow +2 -2
  135. package/store/cloneRelayHandleSourceField.js.flow +5 -6
  136. package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
  137. package/store/createFragmentSpecResolver.js.flow +3 -4
  138. package/store/createRelayContext.js.flow +3 -3
  139. package/store/defaultGetDataID.js.flow +3 -1
  140. package/store/normalizeRelayPayload.js.flow +6 -7
  141. package/store/readInlineData.js.flow +7 -8
  142. package/subscription/requestSubscription.js.flow +54 -27
  143. package/util/NormalizationNode.js.flow +16 -3
  144. package/util/ReaderNode.js.flow +38 -2
  145. package/util/RelayConcreteNode.js.flow +4 -0
  146. package/util/RelayFeatureFlags.js.flow +24 -8
  147. package/util/RelayProfiler.js.flow +22 -194
  148. package/util/RelayReplaySubject.js.flow +9 -9
  149. package/util/RelayRuntimeTypes.js.flow +73 -4
  150. package/util/StringInterner.js.flow +69 -0
  151. package/util/createPayloadFor3DField.js.flow +3 -3
  152. package/util/deepFreeze.js.flow +2 -1
  153. package/util/getFragmentIdentifier.js.flow +27 -15
  154. package/util/getOperation.js.flow +2 -2
  155. package/util/getPaginationMetadata.js.flow +72 -0
  156. package/util/getPaginationVariables.js.flow +108 -0
  157. package/util/getPendingOperationsForFragment.js.flow +62 -0
  158. package/util/getRefetchMetadata.js.flow +79 -0
  159. package/util/getRelayHandleKey.js.flow +1 -2
  160. package/util/getRequestIdentifier.js.flow +3 -3
  161. package/util/getValueAtPath.js.flow +46 -0
  162. package/util/isEmptyObject.js.flow +2 -1
  163. package/util/registerEnvironmentWithDevTools.js.flow +33 -0
  164. package/util/resolveImmediate.js.flow +1 -1
  165. package/util/withDuration.js.flow +32 -0
  166. package/lib/store/RelayRecordSourceMapImpl.js +0 -107
  167. package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
  168. package/store/RelayRecordSourceMapImpl.js.flow +0 -91
  169. package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
@@ -14,13 +14,13 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
16
16
 
17
- var invariant = require("fbjs/lib/invariant");
17
+ var invariant = require('invariant');
18
18
 
19
19
  var RelayOperationTracker = /*#__PURE__*/function () {
20
20
  function RelayOperationTracker() {
21
- this._ownersToPendingOperationsIdentifier = new Map();
22
- this._pendingOperationsToOwnersIdentifier = new Map();
23
- this._ownersIdentifierToPromise = new Map();
21
+ this._ownersToPendingOperations = new Map();
22
+ this._pendingOperationsToOwners = new Map();
23
+ this._ownersToPendingPromise = new Map();
24
24
  }
25
25
  /**
26
26
  * Update the map of current processing operations with the set of
@@ -46,19 +46,19 @@ var RelayOperationTracker = /*#__PURE__*/function () {
46
46
  var owner = _step.value;
47
47
  var ownerIdentifier = owner.identifier;
48
48
 
49
- var pendingOperationsAffectingOwner = this._ownersToPendingOperationsIdentifier.get(ownerIdentifier);
49
+ var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(ownerIdentifier);
50
50
 
51
51
  if (pendingOperationsAffectingOwner != null) {
52
52
  // In this case the `ownerIdentifier` already affected by some operations
53
53
  // We just need to detect, is it the same operation that we already
54
54
  // have in the list, or it's a new operation
55
55
  if (!pendingOperationsAffectingOwner.has(pendingOperationIdentifier)) {
56
- pendingOperationsAffectingOwner.add(pendingOperationIdentifier);
56
+ pendingOperationsAffectingOwner.set(pendingOperationIdentifier, pendingOperation);
57
57
  newlyAffectedOwnersIdentifier.add(ownerIdentifier);
58
58
  }
59
59
  } else {
60
60
  // This is a new `ownerIdentifier` that is affected by the operation
61
- this._ownersToPendingOperationsIdentifier.set(ownerIdentifier, new Set([pendingOperationIdentifier]));
61
+ this._ownersToPendingOperations.set(ownerIdentifier, new Map([[pendingOperationIdentifier, pendingOperation]]));
62
62
 
63
63
  newlyAffectedOwnersIdentifier.add(ownerIdentifier);
64
64
  }
@@ -73,10 +73,10 @@ var RelayOperationTracker = /*#__PURE__*/function () {
73
73
  if (newlyAffectedOwnersIdentifier.size === 0) {
74
74
  return;
75
75
  } // But, if some owners were affected we need to add them to
76
- // the `_pendingOperationsToOwnersIdentifier` set
76
+ // the `_pendingOperationsToOwners` set
77
77
 
78
78
 
79
- var ownersAffectedByOperationIdentifier = this._pendingOperationsToOwnersIdentifier.get(pendingOperationIdentifier) || new Set();
79
+ var ownersAffectedByPendingOperation = this._pendingOperationsToOwners.get(pendingOperationIdentifier) || new Set();
80
80
 
81
81
  var _iterator2 = (0, _createForOfIteratorHelper2["default"])(newlyAffectedOwnersIdentifier),
82
82
  _step2;
@@ -87,7 +87,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
87
87
 
88
88
  this._resolveOwnerResolvers(_ownerIdentifier);
89
89
 
90
- ownersAffectedByOperationIdentifier.add(_ownerIdentifier);
90
+ ownersAffectedByPendingOperation.add(_ownerIdentifier);
91
91
  }
92
92
  } catch (err) {
93
93
  _iterator2.e(err);
@@ -95,7 +95,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
95
95
  _iterator2.f();
96
96
  }
97
97
 
98
- this._pendingOperationsToOwnersIdentifier.set(pendingOperationIdentifier, ownersAffectedByOperationIdentifier);
98
+ this._pendingOperationsToOwners.set(pendingOperationIdentifier, ownersAffectedByPendingOperation);
99
99
  }
100
100
  /**
101
101
  * Once pending operation is completed we need to remove it
@@ -106,7 +106,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
106
106
  _proto.complete = function complete(pendingOperation) {
107
107
  var pendingOperationIdentifier = pendingOperation.identifier;
108
108
 
109
- var affectedOwnersIdentifier = this._pendingOperationsToOwnersIdentifier.get(pendingOperationIdentifier);
109
+ var affectedOwnersIdentifier = this._pendingOperationsToOwners.get(pendingOperationIdentifier);
110
110
 
111
111
  if (affectedOwnersIdentifier == null) {
112
112
  return;
@@ -125,7 +125,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
125
125
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
126
126
  var ownerIdentifier = _step3.value;
127
127
 
128
- var pendingOperationsAffectingOwner = this._ownersToPendingOperationsIdentifier.get(ownerIdentifier);
128
+ var pendingOperationsAffectingOwner = this._ownersToPendingOperations.get(ownerIdentifier);
129
129
 
130
130
  if (!pendingOperationsAffectingOwner) {
131
131
  continue;
@@ -155,7 +155,7 @@ var RelayOperationTracker = /*#__PURE__*/function () {
155
155
 
156
156
  this._resolveOwnerResolvers(_ownerIdentifier2);
157
157
 
158
- this._ownersToPendingOperationsIdentifier["delete"](_ownerIdentifier2);
158
+ this._ownersToPendingOperations["delete"](_ownerIdentifier2);
159
159
  } // Update all ownerIdentifier that were updated by `pendingOperationIdentifier` but still
160
160
  // are affected by other operations
161
161
 
@@ -181,30 +181,35 @@ var RelayOperationTracker = /*#__PURE__*/function () {
181
181
  _iterator5.f();
182
182
  }
183
183
 
184
- this._pendingOperationsToOwnersIdentifier["delete"](pendingOperationIdentifier);
184
+ this._pendingOperationsToOwners["delete"](pendingOperationIdentifier);
185
185
  };
186
186
 
187
187
  _proto._resolveOwnerResolvers = function _resolveOwnerResolvers(ownerIdentifier) {
188
- var promiseEntry = this._ownersIdentifierToPromise.get(ownerIdentifier);
188
+ var promiseEntry = this._ownersToPendingPromise.get(ownerIdentifier);
189
189
 
190
190
  if (promiseEntry != null) {
191
191
  promiseEntry.resolve();
192
192
  }
193
193
 
194
- this._ownersIdentifierToPromise["delete"](ownerIdentifier);
194
+ this._ownersToPendingPromise["delete"](ownerIdentifier);
195
195
  };
196
196
 
197
- _proto.getPromiseForPendingOperationsAffectingOwner = function getPromiseForPendingOperationsAffectingOwner(owner) {
197
+ _proto.getPendingOperationsAffectingOwner = function getPendingOperationsAffectingOwner(owner) {
198
198
  var ownerIdentifier = owner.identifier;
199
199
 
200
- if (!this._ownersToPendingOperationsIdentifier.has(ownerIdentifier)) {
200
+ var pendingOperationsForOwner = this._ownersToPendingOperations.get(ownerIdentifier);
201
+
202
+ if (pendingOperationsForOwner == null || pendingOperationsForOwner.size === 0) {
201
203
  return null;
202
204
  }
203
205
 
204
- var cachedPromiseEntry = this._ownersIdentifierToPromise.get(ownerIdentifier);
206
+ var cachedPromiseEntry = this._ownersToPendingPromise.get(ownerIdentifier);
205
207
 
206
208
  if (cachedPromiseEntry != null) {
207
- return cachedPromiseEntry.promise;
209
+ return {
210
+ promise: cachedPromiseEntry.promise,
211
+ pendingOperations: cachedPromiseEntry.pendingOperations
212
+ };
208
213
  }
209
214
 
210
215
  var resolve;
@@ -212,13 +217,18 @@ var RelayOperationTracker = /*#__PURE__*/function () {
212
217
  resolve = r;
213
218
  });
214
219
  !(resolve != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayOperationTracker: Expected resolver to be defined. If you' + 'are seeing this, it is likely a bug in Relay.') : invariant(false) : void 0;
220
+ var pendingOperations = Array.from(pendingOperationsForOwner.values());
215
221
 
216
- this._ownersIdentifierToPromise.set(ownerIdentifier, {
222
+ this._ownersToPendingPromise.set(ownerIdentifier, {
217
223
  promise: promise,
218
- resolve: resolve
224
+ resolve: resolve,
225
+ pendingOperations: pendingOperations
219
226
  });
220
227
 
221
- return promise;
228
+ return {
229
+ promise: promise,
230
+ pendingOperations: pendingOperations
231
+ };
222
232
  };
223
233
 
224
234
  return RelayOperationTracker;
@@ -10,11 +10,7 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var ErrorUtils = require("fbjs/lib/ErrorUtils");
14
-
15
- var RelayReader = require('./RelayReader');
16
-
17
- var RelayRecordSource = require('./RelayRecordSource');
13
+ var _global$ErrorUtils$ap, _global, _global$ErrorUtils;
18
14
 
19
15
  var RelayRecordSourceMutator = require('../mutations/RelayRecordSourceMutator');
20
16
 
@@ -22,10 +18,17 @@ var RelayRecordSourceProxy = require('../mutations/RelayRecordSourceProxy');
22
18
 
23
19
  var RelayRecordSourceSelectorProxy = require('../mutations/RelayRecordSourceSelectorProxy');
24
20
 
25
- var invariant = require("fbjs/lib/invariant");
21
+ var RelayReader = require('./RelayReader');
22
+
23
+ var RelayRecordSource = require('./RelayRecordSource');
24
+
25
+ var invariant = require('invariant');
26
26
 
27
27
  var warning = require("fbjs/lib/warning");
28
28
 
29
+ var applyWithGuard = (_global$ErrorUtils$ap = (_global = global) === null || _global === void 0 ? void 0 : (_global$ErrorUtils = _global.ErrorUtils) === null || _global$ErrorUtils === void 0 ? void 0 : _global$ErrorUtils.applyWithGuard) !== null && _global$ErrorUtils$ap !== void 0 ? _global$ErrorUtils$ap : function (callback, context, args, onError, name) {
30
+ return callback.apply(context, args);
31
+ };
29
32
  /**
30
33
  * Coordinates the concurrent modification of a `Store` due to optimistic and
31
34
  * non-revertable client updates and server payloads:
@@ -37,13 +40,20 @@ var warning = require("fbjs/lib/warning");
37
40
  * - Executes handlers for "handle" fields.
38
41
  * - Reverts and reapplies pending optimistic updates.
39
42
  */
43
+
40
44
  var RelayPublishQueue = /*#__PURE__*/function () {
41
45
  // True if the next `run()` should apply the backup and rerun all optimistic
42
46
  // updates performing a rebase.
43
47
  // Payloads to apply or Sources to publish to the store with the next `run()`.
48
+ // $FlowFixMe[unclear-type] See explanation below.
44
49
  // Optimistic updaters to add with the next `run()`.
50
+ // $FlowFixMe[unclear-type] See explanation below.
45
51
  // Optimistic updaters that are already added and might be rerun in order to
46
52
  // rebase them.
53
+ // $FlowFixMe[unclear-type] See explanation below.
54
+ // For _pendingOptimisticUpdates, _appliedOptimisticUpdates, and _pendingData,
55
+ // we want to parametrize by "any" since the type is effectively
56
+ // "the union of all T's that PublishQueue's methods were called with".
47
57
  // Garbage collection hold, should rerun gc on dispose
48
58
  function RelayPublishQueue(store, handlerProvider, getDataID) {
49
59
  this._hasStoreSnapshot = false;
@@ -145,11 +155,25 @@ var RelayPublishQueue = /*#__PURE__*/function () {
145
155
  ;
146
156
 
147
157
  _proto.run = function run(sourceOperation) {
158
+ var runWillClearGcHold = this._appliedOptimisticUpdates === 0 && !!this._gcHold;
159
+ var runIsANoop = // this._pendingBackupRebase is true if an applied optimistic
160
+ // update has potentially been reverted or if this._pendingData is not empty.
161
+ !this._pendingBackupRebase && this._pendingOptimisticUpdates.size === 0 && !runWillClearGcHold;
162
+
148
163
  if (process.env.NODE_ENV !== "production") {
164
+ process.env.NODE_ENV !== "production" ? warning(!runIsANoop, 'RelayPublishQueue.run was called, but the call would have been a noop.') : void 0;
149
165
  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
166
  this._isRunning = true;
151
167
  }
152
168
 
169
+ if (runIsANoop) {
170
+ if (process.env.NODE_ENV !== "production") {
171
+ this._isRunning = false;
172
+ }
173
+
174
+ return [];
175
+ }
176
+
153
177
  if (this._pendingBackupRebase) {
154
178
  if (this._hasStoreSnapshot) {
155
179
  this._store.restore();
@@ -259,7 +283,7 @@ var RelayPublishQueue = /*#__PURE__*/function () {
259
283
  var sink = RelayRecordSource.create();
260
284
  var mutator = new RelayRecordSourceMutator(_this2._store.getSource(), sink);
261
285
  var recordSourceProxy = new RelayRecordSourceProxy(mutator, _this2._getDataID);
262
- ErrorUtils.applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
286
+ applyWithGuard(updater, null, [recordSourceProxy], null, 'RelayPublishQueue:commitData');
263
287
  invalidatedStore = invalidatedStore || recordSourceProxy.isStoreMarkedForInvalidation();
264
288
  var idsMarkedForInvalidation = recordSourceProxy.getIDsMarkedForInvalidation();
265
289
 
@@ -283,28 +307,32 @@ var RelayPublishQueue = /*#__PURE__*/function () {
283
307
 
284
308
  var sink = RelayRecordSource.create();
285
309
  var mutator = new RelayRecordSourceMutator(this._store.getSource(), sink);
286
- var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider);
310
+ var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, this._handlerProvider); // $FlowFixMe[unclear-type] see explanation above.
287
311
 
288
312
  var processUpdate = function processUpdate(optimisticUpdate) {
289
313
  if (optimisticUpdate.storeUpdater) {
290
314
  var storeUpdater = optimisticUpdate.storeUpdater;
291
- ErrorUtils.applyWithGuard(storeUpdater, null, [recordSourceProxy], null, 'RelayPublishQueue:applyUpdates');
315
+ applyWithGuard(storeUpdater, null, [recordSourceProxy], null, 'RelayPublishQueue:applyUpdates');
292
316
  } else {
293
317
  var operation = optimisticUpdate.operation,
294
318
  payload = optimisticUpdate.payload,
295
319
  updater = optimisticUpdate.updater;
296
320
  var source = payload.source,
297
321
  fieldPayloads = payload.fieldPayloads;
298
- var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, operation.fragment);
299
- var selectorData;
300
322
 
301
323
  if (source) {
302
324
  recordSourceProxy.publishSource(source, fieldPayloads);
303
- selectorData = lookupSelector(source, operation.fragment);
304
325
  }
305
326
 
306
327
  if (updater) {
307
- ErrorUtils.applyWithGuard(updater, null, [recordSourceSelectorProxy, selectorData], null, 'RelayPublishQueue:applyUpdates');
328
+ var selectorData;
329
+
330
+ if (source) {
331
+ selectorData = lookupSelector(source, operation.fragment);
332
+ }
333
+
334
+ var recordSourceSelectorProxy = new RelayRecordSourceSelectorProxy(mutator, recordSourceProxy, operation.fragment);
335
+ applyWithGuard(updater, null, [recordSourceSelectorProxy, selectorData], null, 'RelayPublishQueue:applyUpdates');
308
336
  }
309
337
  }
310
338
  }; // rerun all updaters in case we are running a rebase