relay-runtime 9.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 (111) 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/connection/ConnectionHandler.js +1 -3
  7. package/lib/index.js +1 -2
  8. package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
  9. package/lib/mutations/RelayRecordProxy.js +1 -3
  10. package/lib/mutations/RelayRecordSourceMutator.js +1 -3
  11. package/lib/mutations/RelayRecordSourceProxy.js +1 -3
  12. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
  13. package/lib/mutations/commitMutation.js +2 -0
  14. package/lib/mutations/validateMutation.js +13 -4
  15. package/lib/network/RelayObservable.js +9 -9
  16. package/lib/network/RelayQueryResponseCache.js +8 -6
  17. package/lib/query/fetchQueryInternal.js +1 -8
  18. package/lib/store/DataChecker.js +23 -51
  19. package/lib/store/RelayConcreteVariables.js +6 -2
  20. package/lib/store/RelayModernEnvironment.js +30 -12
  21. package/lib/store/RelayModernFragmentSpecResolver.js +9 -13
  22. package/lib/store/RelayModernQueryExecutor.js +73 -37
  23. package/lib/store/RelayModernRecord.js +14 -9
  24. package/lib/store/RelayModernStore.js +107 -70
  25. package/lib/store/RelayOperationTracker.js +35 -78
  26. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  27. package/lib/store/RelayPublishQueue.js +1 -3
  28. package/lib/store/RelayReader.js +1 -3
  29. package/lib/store/RelayRecordSource.js +1 -3
  30. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  31. package/lib/store/RelayReferenceMarker.js +2 -6
  32. package/lib/store/RelayResponseNormalizer.js +9 -10
  33. package/lib/store/StoreInspector.js +7 -5
  34. package/lib/store/normalizeRelayPayload.js +6 -2
  35. package/lib/subscription/requestSubscription.js +4 -2
  36. package/lib/util/RelayFeatureFlags.js +1 -1
  37. package/lib/util/RelayReplaySubject.js +1 -3
  38. package/lib/util/createPayloadFor3DField.js +7 -2
  39. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  40. package/mutations/RelayRecordProxy.js.flow +165 -0
  41. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  42. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  43. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  44. package/mutations/applyOptimisticMutation.js.flow +76 -0
  45. package/mutations/commitLocalUpdate.js.flow +24 -0
  46. package/mutations/commitMutation.js.flow +184 -0
  47. package/mutations/validateMutation.js.flow +211 -0
  48. package/network/ConvertToExecuteFunction.js.flow +49 -0
  49. package/network/RelayNetwork.js.flow +84 -0
  50. package/network/RelayNetworkTypes.js.flow +123 -0
  51. package/network/RelayObservable.js.flow +634 -0
  52. package/network/RelayQueryResponseCache.js.flow +111 -0
  53. package/package.json +1 -1
  54. package/query/GraphQLTag.js.flow +166 -0
  55. package/query/fetchQuery.js.flow +47 -0
  56. package/query/fetchQueryInternal.js.flow +349 -0
  57. package/relay-runtime.js +2 -2
  58. package/relay-runtime.min.js +2 -2
  59. package/store/ClientID.js.flow +43 -0
  60. package/store/DataChecker.js.flow +426 -0
  61. package/store/RelayConcreteVariables.js.flow +96 -0
  62. package/store/RelayModernEnvironment.js.flow +526 -0
  63. package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
  64. package/store/RelayModernOperationDescriptor.js.flow +88 -0
  65. package/store/RelayModernQueryExecutor.js.flow +1327 -0
  66. package/store/RelayModernRecord.js.flow +403 -0
  67. package/store/RelayModernSelector.js.flow +444 -0
  68. package/store/RelayModernStore.js.flow +757 -0
  69. package/store/RelayOperationTracker.js.flow +164 -0
  70. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  71. package/store/RelayPublishQueue.js.flow +401 -0
  72. package/store/RelayReader.js.flow +376 -0
  73. package/store/RelayRecordSource.js.flow +29 -0
  74. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  75. package/store/RelayRecordState.js.flow +37 -0
  76. package/store/RelayReferenceMarker.js.flow +236 -0
  77. package/store/RelayResponseNormalizer.js.flow +556 -0
  78. package/store/RelayStoreTypes.js.flow +873 -0
  79. package/store/RelayStoreUtils.js.flow +218 -0
  80. package/store/StoreInspector.js.flow +173 -0
  81. package/store/ViewerPattern.js.flow +26 -0
  82. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  83. package/store/createFragmentSpecResolver.js.flow +55 -0
  84. package/store/createRelayContext.js.flow +44 -0
  85. package/store/defaultGetDataID.js.flow +27 -0
  86. package/store/hasOverlappingIDs.js.flow +34 -0
  87. package/store/isRelayModernEnvironment.js.flow +27 -0
  88. package/store/normalizeRelayPayload.js.flow +51 -0
  89. package/store/readInlineData.js.flow +75 -0
  90. package/subscription/requestSubscription.js.flow +100 -0
  91. package/util/JSResourceTypes.flow.js.flow +20 -0
  92. package/util/NormalizationNode.js.flow +191 -0
  93. package/util/ReaderNode.js.flow +208 -0
  94. package/util/RelayConcreteNode.js.flow +80 -0
  95. package/util/RelayDefaultHandleKey.js.flow +17 -0
  96. package/util/RelayError.js.flow +33 -0
  97. package/util/RelayFeatureFlags.js.flow +30 -0
  98. package/util/RelayProfiler.js.flow +284 -0
  99. package/util/RelayReplaySubject.js.flow +134 -0
  100. package/util/RelayRuntimeTypes.js.flow +70 -0
  101. package/util/createPayloadFor3DField.js.flow +43 -0
  102. package/util/deepFreeze.js.flow +36 -0
  103. package/util/generateID.js.flow +21 -0
  104. package/util/getFragmentIdentifier.js.flow +52 -0
  105. package/util/getRelayHandleKey.js.flow +41 -0
  106. package/util/getRequestIdentifier.js.flow +41 -0
  107. package/util/isPromise.js.flow +21 -0
  108. package/util/isScalarAndEqual.js.flow +26 -0
  109. package/util/recycleNodesInto.js.flow +80 -0
  110. package/util/resolveImmediate.js.flow +30 -0
  111. package/util/stableCopy.js.flow +35 -0
@@ -256,12 +256,6 @@ function getObservableForActiveRequest(environment, request) {
256
256
 
257
257
  return getActiveStatusObservableForCachedRequest(environment, requestCache, cachedRequest);
258
258
  }
259
-
260
- function isRequestActive(environment, request) {
261
- var requestCache = getRequestCache(environment);
262
- var cachedRequest = requestCache.get(request.identifier);
263
- return cachedRequest != null && environment.isRequestActive(cachedRequest.identifier);
264
- }
265
259
  /**
266
260
  * @private
267
261
  */
@@ -293,6 +287,5 @@ module.exports = {
293
287
  fetchQuery: fetchQuery,
294
288
  fetchQueryDeduped: fetchQueryDeduped,
295
289
  getPromiseForActiveRequest: getPromiseForActiveRequest,
296
- getObservableForActiveRequest: getObservableForActiveRequest,
297
- isRequestActive: isRequestActive
290
+ getObservableForActiveRequest: getObservableForActiveRequest
298
291
  };
@@ -11,6 +11,12 @@
11
11
  // flowlint ambiguous-object-type:error
12
12
  'use strict';
13
13
 
14
+ 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; } } }; }
15
+
16
+ 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); }
17
+
18
+ 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; }
19
+
14
20
  var RelayConcreteNode = require('../util/RelayConcreteNode');
15
21
 
16
22
  var RelayModernRecord = require('./RelayModernRecord');
@@ -69,17 +75,13 @@ function check(source, target, selector, handlers, operationLoader, getDataID) {
69
75
  */
70
76
 
71
77
 
72
- var DataChecker =
73
- /*#__PURE__*/
74
- function () {
78
+ var DataChecker = /*#__PURE__*/function () {
75
79
  function DataChecker(source, target, variables, handlers, operationLoader, getDataID) {
76
- var _operationLoader;
77
-
78
80
  var mutator = new RelayRecordSourceMutator(source, target);
79
81
  this._mostRecentlyInvalidatedAt = null;
80
82
  this._handlers = handlers;
81
83
  this._mutator = mutator;
82
- this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
84
+ this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
83
85
  this._recordSourceProxy = new RelayRecordSourceProxy(mutator, getDataID);
84
86
  this._recordWasMissing = false;
85
87
  this._source = source;
@@ -131,12 +133,11 @@ function () {
131
133
  args = _this$_getDataForHand.args,
132
134
  record = _this$_getDataForHand.record;
133
135
 
134
- var _iteratorNormalCompletion = true;
135
- var _didIteratorError = false;
136
- var _iteratorError = undefined;
136
+ var _iterator = _createForOfIteratorHelper(this._handlers),
137
+ _step;
137
138
 
138
139
  try {
139
- for (var _iterator = this._handlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
140
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
140
141
  var handler = _step.value;
141
142
 
142
143
  if (handler.kind === 'scalar') {
@@ -148,18 +149,9 @@ function () {
148
149
  }
149
150
  }
150
151
  } catch (err) {
151
- _didIteratorError = true;
152
- _iteratorError = err;
152
+ _iterator.e(err);
153
153
  } finally {
154
- try {
155
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
156
- _iterator["return"]();
157
- }
158
- } finally {
159
- if (_didIteratorError) {
160
- throw _iteratorError;
161
- }
162
- }
154
+ _iterator.f();
163
155
  }
164
156
 
165
157
  this._handleMissing();
@@ -170,12 +162,11 @@ function () {
170
162
  args = _this$_getDataForHand2.args,
171
163
  record = _this$_getDataForHand2.record;
172
164
 
173
- var _iteratorNormalCompletion2 = true;
174
- var _didIteratorError2 = false;
175
- var _iteratorError2 = undefined;
165
+ var _iterator2 = _createForOfIteratorHelper(this._handlers),
166
+ _step2;
176
167
 
177
168
  try {
178
- for (var _iterator2 = this._handlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
169
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
179
170
  var handler = _step2.value;
180
171
 
181
172
  if (handler.kind === 'linked') {
@@ -187,18 +178,9 @@ function () {
187
178
  }
188
179
  }
189
180
  } catch (err) {
190
- _didIteratorError2 = true;
191
- _iteratorError2 = err;
181
+ _iterator2.e(err);
192
182
  } finally {
193
- try {
194
- if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
195
- _iterator2["return"]();
196
- }
197
- } finally {
198
- if (_didIteratorError2) {
199
- throw _iteratorError2;
200
- }
201
- }
183
+ _iterator2.f();
202
184
  }
203
185
 
204
186
  this._handleMissing();
@@ -211,12 +193,11 @@ function () {
211
193
  args = _this$_getDataForHand3.args,
212
194
  record = _this$_getDataForHand3.record;
213
195
 
214
- var _iteratorNormalCompletion3 = true;
215
- var _didIteratorError3 = false;
216
- var _iteratorError3 = undefined;
196
+ var _iterator3 = _createForOfIteratorHelper(this._handlers),
197
+ _step3;
217
198
 
218
199
  try {
219
- for (var _iterator3 = this._handlers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
200
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
220
201
  var handler = _step3.value;
221
202
 
222
203
  if (handler.kind === 'pluralLinked') {
@@ -234,18 +215,9 @@ function () {
234
215
  }
235
216
  }
236
217
  } catch (err) {
237
- _didIteratorError3 = true;
238
- _iteratorError3 = err;
218
+ _iterator3.e(err);
239
219
  } finally {
240
- try {
241
- if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
242
- _iterator3["return"]();
243
- }
244
- } finally {
245
- if (_didIteratorError3) {
246
- throw _iteratorError3;
247
- }
248
- }
220
+ _iterator3.f();
249
221
  }
250
222
 
251
223
  this._handleMissing();
@@ -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
 
@@ -30,7 +34,7 @@ function getFragmentVariables(fragment, rootVariables, argumentVariables) {
30
34
  return;
31
35
  }
32
36
 
33
- variables = variables || (0, _objectSpread2["default"])({}, argumentVariables);
37
+ variables = variables || _objectSpread({}, argumentVariables);
34
38
 
35
39
  switch (definition.kind) {
36
40
  case 'LocalArgument':
@@ -11,6 +11,14 @@
11
11
  // flowlint ambiguous-object-type:error
12
12
  'use strict';
13
13
 
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
+
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
+
18
+ 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; }
19
+
20
+ 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; }
21
+
14
22
  var RelayDefaultHandlerProvider = require('../handlers/RelayDefaultHandlerProvider');
15
23
 
16
24
  var RelayFeatureFlags = require('../util/RelayFeatureFlags');
@@ -31,16 +39,15 @@ var generateID = require('../util/generateID');
31
39
 
32
40
  var invariant = require("fbjs/lib/invariant");
33
41
 
34
- var RelayModernEnvironment =
35
- /*#__PURE__*/
36
- function () {
42
+ var RelayModernEnvironment = /*#__PURE__*/function () {
37
43
  function RelayModernEnvironment(config) {
38
44
  var _this = this;
39
45
 
40
- var _config$log, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$operationTrac;
46
+ var _config$log, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$isServer, _config$operationTrac;
41
47
 
42
48
  this.configName = config.configName;
43
49
  var handlerProvider = config.handlerProvider ? config.handlerProvider : RelayDefaultHandlerProvider;
50
+ this._treatMissingFieldsAsNull = config.treatMissingFieldsAsNull === true;
44
51
  var operationLoader = config.operationLoader;
45
52
 
46
53
  if (process.env.NODE_ENV !== "production") {
@@ -59,6 +66,7 @@ function () {
59
66
  this._scheduler = (_config$scheduler = config.scheduler) !== null && _config$scheduler !== void 0 ? _config$scheduler : null;
60
67
  this._store = config.store;
61
68
  this.options = config.options;
69
+ this._isServer = (_config$isServer = config.isServer) !== null && _config$isServer !== void 0 ? _config$isServer : false;
62
70
 
63
71
  this.__setNet = function (newNet) {
64
72
  return _this._network = newNet;
@@ -160,7 +168,8 @@ function () {
160
168
  store: _this3._store,
161
169
  updater: null,
162
170
  operationTracker: _this3._operationTracker,
163
- getDataID: _this3._getDataID
171
+ getDataID: _this3._getDataID,
172
+ treatMissingFieldsAsNull: _this3._treatMissingFieldsAsNull
164
173
  });
165
174
  return function () {
166
175
  return executor.cancel();
@@ -201,7 +210,8 @@ function () {
201
210
  updater: null,
202
211
  operationTracker: _this4._operationTracker,
203
212
  getDataID: _this4._getDataID,
204
- isClientPayload: true
213
+ isClientPayload: true,
214
+ treatMissingFieldsAsNull: _this4._treatMissingFieldsAsNull
205
215
  });
206
216
  return function () {
207
217
  return executor.cancel();
@@ -227,6 +237,10 @@ function () {
227
237
  return this._store.retain(operation);
228
238
  };
229
239
 
240
+ _proto.isServer = function isServer() {
241
+ return this._isServer;
242
+ };
243
+
230
244
  _proto._checkSelectorAndHandleMissingFields = function _checkSelectorAndHandleMissingFields(operation, handlers) {
231
245
  var target = RelayRecordSource.create();
232
246
 
@@ -279,7 +293,8 @@ function () {
279
293
  store: _this5._store,
280
294
  updater: updater,
281
295
  operationTracker: _this5._operationTracker,
282
- getDataID: _this5._getDataID
296
+ getDataID: _this5._getDataID,
297
+ treatMissingFieldsAsNull: _this5._treatMissingFieldsAsNull
283
298
  });
284
299
  return function () {
285
300
  return executor.cancel();
@@ -301,7 +316,8 @@ function () {
301
316
  _proto.executeMutation = function executeMutation(_ref2) {
302
317
  var _this6 = this;
303
318
 
304
- var operation = _ref2.operation,
319
+ var cacheConfig = _ref2.cacheConfig,
320
+ operation = _ref2.operation,
305
321
  optimisticResponse = _ref2.optimisticResponse,
306
322
  optimisticUpdater = _ref2.optimisticUpdater,
307
323
  updater = _ref2.updater,
@@ -322,9 +338,9 @@ function () {
322
338
  };
323
339
  }
324
340
 
325
- var source = _this6._network.execute(operation.request.node.params, operation.request.variables, {
341
+ var source = _this6._network.execute(operation.request.node.params, operation.request.variables, _objectSpread({}, cacheConfig, {
326
342
  force: true
327
- }, uploadables, logRequestInfo);
343
+ }), uploadables, logRequestInfo);
328
344
 
329
345
  var executor = RelayModernQueryExecutor.execute({
330
346
  operation: operation,
@@ -338,7 +354,8 @@ function () {
338
354
  store: _this6._store,
339
355
  updater: updater,
340
356
  operationTracker: _this6._operationTracker,
341
- getDataID: _this6._getDataID
357
+ getDataID: _this6._getDataID,
358
+ treatMissingFieldsAsNull: _this6._treatMissingFieldsAsNull
342
359
  });
343
360
  return function () {
344
361
  return executor.cancel();
@@ -373,7 +390,8 @@ function () {
373
390
  sink: sink,
374
391
  source: source,
375
392
  store: _this7._store,
376
- getDataID: _this7._getDataID
393
+ getDataID: _this7._getDataID,
394
+ treatMissingFieldsAsNull: _this7._treatMissingFieldsAsNull
377
395
  });
378
396
  return function () {
379
397
  return executor.cancel();
@@ -12,10 +12,12 @@
12
12
 
13
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
14
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
16
-
17
15
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
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; }
20
+
19
21
  var RelayFeatureFlags = require('../util/RelayFeatureFlags');
20
22
 
21
23
  var areEqual = require("fbjs/lib/areEqual");
@@ -56,9 +58,7 @@ var _require3 = require('./RelayModernSelector'),
56
58
  * the resolver as stale and notify the caller, and the actual results are
57
59
  * recomputed the first time `resolve()` is called.
58
60
  */
59
- var RelayModernFragmentSpecResolver =
60
- /*#__PURE__*/
61
- function () {
61
+ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
62
62
  function RelayModernFragmentSpecResolver(context, fragments, props, callback) {
63
63
  var _this = this;
64
64
 
@@ -105,7 +105,7 @@ function () {
105
105
  var nextItem = resolver.resolve();
106
106
 
107
107
  if (nextData || nextItem !== prevItem) {
108
- nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
108
+ nextData = nextData || _objectSpread({}, prevData);
109
109
  nextData[_key2] = nextItem;
110
110
  }
111
111
  } else {
@@ -114,7 +114,7 @@ function () {
114
114
  var _nextItem = prop !== undefined ? prop : null;
115
115
 
116
116
  if (nextData || !isScalarAndEqual(_nextItem, prevItem)) {
117
- nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
117
+ nextData = nextData || _objectSpread({}, prevData);
118
118
  nextData[_key2] = _nextItem;
119
119
  }
120
120
  }
@@ -192,9 +192,7 @@ function () {
192
192
  */
193
193
 
194
194
 
195
- var SelectorResolver =
196
- /*#__PURE__*/
197
- function () {
195
+ var SelectorResolver = /*#__PURE__*/function () {
198
196
  function SelectorResolver(environment, selector, callback) {
199
197
  var _this2 = this;
200
198
 
@@ -307,9 +305,7 @@ function () {
307
305
  */
308
306
 
309
307
 
310
- var SelectorListResolver =
311
- /*#__PURE__*/
312
- function () {
308
+ var SelectorListResolver = /*#__PURE__*/function () {
313
309
  function SelectorListResolver(environment, selector, callback) {
314
310
  var _this3 = this;
315
311
 
@@ -13,10 +13,20 @@
13
13
 
14
14
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
15
 
16
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
17
17
 
18
18
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
19
19
 
20
+ 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; }
21
+
22
+ 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; }
23
+
24
+ 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; } } }; }
25
+
26
+ 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); }
27
+
28
+ 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; }
29
+
20
30
  var RelayError = require('../util/RelayError');
21
31
 
22
32
  var RelayModernRecord = require('./RelayModernRecord');
@@ -54,9 +64,7 @@ function execute(config) {
54
64
  */
55
65
 
56
66
 
57
- var Executor =
58
- /*#__PURE__*/
59
- function () {
67
+ var Executor = /*#__PURE__*/function () {
60
68
  function Executor(_ref) {
61
69
  var _this = this;
62
70
 
@@ -71,9 +79,11 @@ function () {
71
79
  store = _ref.store,
72
80
  updater = _ref.updater,
73
81
  operationTracker = _ref.operationTracker,
82
+ treatMissingFieldsAsNull = _ref.treatMissingFieldsAsNull,
74
83
  getDataID = _ref.getDataID,
75
84
  isClientPayload = _ref.isClientPayload;
76
85
  this._getDataID = getDataID;
86
+ this._treatMissingFieldsAsNull = treatMissingFieldsAsNull;
77
87
  this._incrementalPayloadsPending = false;
78
88
  this._incrementalResults = new Map();
79
89
  this._nextSubscriptionId = 0;
@@ -116,7 +126,7 @@ function () {
116
126
  if (optimisticConfig != null) {
117
127
  this._processOptimisticResponse(optimisticConfig.response != null ? {
118
128
  data: optimisticConfig.response
119
- } : null, optimisticConfig.updater);
129
+ } : null, optimisticConfig.updater, false);
120
130
  }
121
131
  } // Cancel any pending execution tasks and mark the executor as completed.
122
132
 
@@ -266,26 +276,32 @@ function () {
266
276
  _proto._handleErrorResponse = function _handleErrorResponse(responses) {
267
277
  var _this5 = this;
268
278
 
269
- // Once thing to notice here: if one of the responses in array has errors
270
- // All batch will be ignored.
271
- return responses.map(function (response) {
272
- if (response.data == null) {
273
- var messages = response.errors ? response.errors.map(function (_ref2) {
279
+ var results = [];
280
+ responses.forEach(function (response) {
281
+ if (response.data === null && response.extensions != null && !response.hasOwnProperty('errors')) {
282
+ // Skip extensions-only payloads
283
+ return;
284
+ } else if (response.data == null) {
285
+ // Error if any other payload in the batch is missing data, regardless of whether
286
+ // it had `errors` or not.
287
+ var errors = response.hasOwnProperty('errors') && response.errors != null ? response.errors : null;
288
+ var messages = errors ? errors.map(function (_ref2) {
274
289
  var message = _ref2.message;
275
290
  return message;
276
291
  }).join('\n') : '(No errors)';
277
292
  var error = RelayError.create('RelayNetwork', 'No data returned for operation `' + _this5._operation.request.node.params.name + '`, got error(s):\n' + messages + '\n\nSee the error `source` property for more information.');
278
293
  error.source = {
279
- errors: response.errors,
294
+ errors: errors,
280
295
  operation: _this5._operation.request.node,
281
296
  variables: _this5._operation.request.variables
282
297
  };
283
298
  throw error;
299
+ } else {
300
+ var responseWithData = response;
301
+ results.push(responseWithData);
284
302
  }
285
-
286
- var responseWithData = response;
287
- return responseWithData;
288
303
  });
304
+ return results;
289
305
  }
290
306
  /**
291
307
  * This method return boolean to indicate if the optimistic
@@ -316,7 +332,7 @@ function () {
316
332
  }
317
333
 
318
334
  if (isOptimistic) {
319
- this._processOptimisticResponse(response, null);
335
+ this._processOptimisticResponse(response, null, this._treatMissingFieldsAsNull);
320
336
 
321
337
  this._sink.next(response);
322
338
 
@@ -331,7 +347,31 @@ function () {
331
347
  return;
332
348
  }
333
349
 
334
- var responsesWithData = this._handleErrorResponse(Array.isArray(response) ? response : [response]); // Next, handle optimistic responses
350
+ var responses = Array.isArray(response) ? response : [response];
351
+
352
+ var responsesWithData = this._handleErrorResponse(responses);
353
+
354
+ if (responsesWithData.length === 0) {
355
+ // no results with data, nothing to process
356
+ // this can occur with extensions-only payloads
357
+ var isFinal = responses.some(function (x) {
358
+ var _x$extensions;
359
+
360
+ return ((_x$extensions = x.extensions) === null || _x$extensions === void 0 ? void 0 : _x$extensions.is_final) === true;
361
+ });
362
+
363
+ if (isFinal) {
364
+ this._state = 'loading_final';
365
+
366
+ this._updateActiveState();
367
+
368
+ this._incrementalPayloadsPending = false;
369
+ }
370
+
371
+ this._sink.next(response);
372
+
373
+ return;
374
+ } // Next, handle optimistic responses
335
375
 
336
376
 
337
377
  var isOptimistic = this._handleOptimisticResponses(responsesWithData);
@@ -380,7 +420,7 @@ function () {
380
420
  this._sink.next(response);
381
421
  };
382
422
 
383
- _proto._processOptimisticResponse = function _processOptimisticResponse(response, updater) {
423
+ _proto._processOptimisticResponse = function _processOptimisticResponse(response, updater, treatMissingFieldsAsNull) {
384
424
  var _this6 = this;
385
425
 
386
426
  !(this._optimisticUpdates === null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'environment.execute: only support one optimistic response per ' + 'execute.') : invariant(false) : void 0;
@@ -395,7 +435,8 @@ function () {
395
435
  var payload = normalizeResponse(response, this._operation.root, ROOT_TYPE, {
396
436
  getDataID: this._getDataID,
397
437
  path: [],
398
- request: this._operation.request
438
+ request: this._operation.request,
439
+ treatMissingFieldsAsNull: treatMissingFieldsAsNull
399
440
  });
400
441
  validateOptimisticResponsePayload(payload);
401
442
  optimisticUpdates.push({
@@ -433,12 +474,12 @@ function () {
433
474
  var moduleImportPayloads = payload.moduleImportPayloads;
434
475
  var operationLoader = this._operationLoader;
435
476
  !operationLoader ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected an operationLoader to be ' + 'configured when using `@match`.') : invariant(false) : void 0;
436
- var _iteratorNormalCompletion = true;
437
- var _didIteratorError = false;
438
- var _iteratorError = undefined;
477
+
478
+ var _iterator = _createForOfIteratorHelper(moduleImportPayloads),
479
+ _step;
439
480
 
440
481
  try {
441
- for (var _iterator = moduleImportPayloads[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
482
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
442
483
  var moduleImportPayload = _step.value;
443
484
  var operation = operationLoader.get(moduleImportPayload.operationReference);
444
485
 
@@ -451,18 +492,9 @@ function () {
451
492
  }
452
493
  }
453
494
  } catch (err) {
454
- _didIteratorError = true;
455
- _iteratorError = err;
495
+ _iterator.e(err);
456
496
  } finally {
457
- try {
458
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
459
- _iterator["return"]();
460
- }
461
- } finally {
462
- if (_didIteratorError) {
463
- throw _iteratorError;
464
- }
465
- }
497
+ _iterator.f();
466
498
  }
467
499
  }
468
500
  };
@@ -474,7 +506,8 @@ function () {
474
506
  }, selector, moduleImportPayload.typeName, {
475
507
  getDataID: this._getDataID,
476
508
  path: moduleImportPayload.path,
477
- request: this._operation.request
509
+ request: this._operation.request,
510
+ treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
478
511
  });
479
512
  };
480
513
 
@@ -541,6 +574,7 @@ function () {
541
574
  return responses.map(function (payloadPart) {
542
575
  var relayPayload = normalizeResponse(payloadPart, _this8._operation.root, ROOT_TYPE, {
543
576
  getDataID: _this8._getDataID,
577
+ treatMissingFieldsAsNull: _this8._treatMissingFieldsAsNull,
544
578
  path: [],
545
579
  request: _this8._operation.request
546
580
  });
@@ -889,7 +923,8 @@ function () {
889
923
  var relayPayload = normalizeResponse(response, placeholder.selector, placeholder.typeName, {
890
924
  getDataID: this._getDataID,
891
925
  path: placeholder.path,
892
- request: this._operation.request
926
+ request: this._operation.request,
927
+ treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
893
928
  });
894
929
 
895
930
  this._publishQueue.commitPayload(this._operation, relayPayload); // Load the version of the parent record from which this incremental data
@@ -1040,7 +1075,8 @@ function () {
1040
1075
  var relayPayload = normalizeResponse(response, selector, typeName, {
1041
1076
  getDataID: this._getDataID,
1042
1077
  path: [].concat((0, _toConsumableArray2["default"])(normalizationPath), [responseKey, String(itemIndex)]),
1043
- request: this._operation.request
1078
+ request: this._operation.request,
1079
+ treatMissingFieldsAsNull: this._treatMissingFieldsAsNull
1044
1080
  });
1045
1081
  return {
1046
1082
  fieldPayloads: fieldPayloads,
@@ -1100,7 +1136,7 @@ function normalizeResponse(response, selector, typeName, options) {
1100
1136
  var record = RelayModernRecord.create(selector.dataID, typeName);
1101
1137
  source.set(selector.dataID, record);
1102
1138
  var relayPayload = RelayResponseNormalizer.normalize(source, selector, data, options);
1103
- return (0, _objectSpread2["default"])({}, relayPayload, {
1139
+ return _objectSpread({}, relayPayload, {
1104
1140
  errors: errors,
1105
1141
  isFinal: ((_response$extensions3 = response.extensions) === null || _response$extensions3 === void 0 ? void 0 : _response$extensions3.is_final) === true
1106
1142
  });