relay-runtime 9.0.0 → 10.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 (142) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +47 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/handlers/connection/MutationHandlers.js.flow +199 -0
  5. package/index.js +1 -1
  6. package/index.js.flow +335 -0
  7. package/lib/handlers/RelayDefaultHandlerProvider.js +20 -0
  8. package/lib/handlers/connection/ConnectionHandler.js +1 -3
  9. package/lib/handlers/connection/MutationHandlers.js +212 -0
  10. package/lib/index.js +14 -2
  11. package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
  12. package/lib/mutations/RelayRecordProxy.js +1 -3
  13. package/lib/mutations/RelayRecordSourceMutator.js +1 -3
  14. package/lib/mutations/RelayRecordSourceProxy.js +1 -3
  15. package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
  16. package/lib/mutations/commitMutation.js +2 -3
  17. package/lib/mutations/validateMutation.js +40 -9
  18. package/lib/network/RelayObservable.js +9 -9
  19. package/lib/network/RelayQueryResponseCache.js +8 -6
  20. package/lib/query/GraphQLTag.js +2 -1
  21. package/lib/query/PreloadableQueryRegistry.js +70 -0
  22. package/lib/query/fetchQuery.js +2 -3
  23. package/lib/query/fetchQueryInternal.js +5 -14
  24. package/lib/store/DataChecker.js +200 -71
  25. package/lib/store/RelayConcreteVariables.js +6 -2
  26. package/lib/store/RelayModernEnvironment.js +124 -65
  27. package/lib/store/RelayModernFragmentSpecResolver.js +19 -14
  28. package/lib/store/RelayModernOperationDescriptor.js +6 -5
  29. package/lib/store/RelayModernQueryExecutor.js +122 -73
  30. package/lib/store/RelayModernRecord.js +14 -9
  31. package/lib/store/RelayModernSelector.js +6 -2
  32. package/lib/store/RelayModernStore.js +281 -131
  33. package/lib/store/RelayOperationTracker.js +35 -78
  34. package/lib/store/RelayOptimisticRecordSource.js +7 -5
  35. package/lib/store/RelayPublishQueue.js +2 -4
  36. package/lib/store/RelayReader.js +304 -52
  37. package/lib/store/RelayRecordSource.js +1 -3
  38. package/lib/store/RelayRecordSourceMapImpl.js +13 -18
  39. package/lib/store/RelayReferenceMarker.js +125 -14
  40. package/lib/store/RelayResponseNormalizer.js +261 -66
  41. package/lib/store/RelayStoreReactFlightUtils.js +47 -0
  42. package/lib/store/RelayStoreUtils.js +1 -0
  43. package/lib/store/StoreInspector.js +8 -8
  44. package/lib/store/TypeID.js +28 -0
  45. package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
  46. package/lib/store/defaultRequiredFieldLogger.js +18 -0
  47. package/lib/store/normalizeRelayPayload.js +6 -2
  48. package/lib/store/readInlineData.js +1 -1
  49. package/lib/subscription/requestSubscription.js +4 -3
  50. package/lib/util/NormalizationNode.js +1 -5
  51. package/lib/util/RelayConcreteNode.js +11 -6
  52. package/lib/util/RelayError.js +39 -9
  53. package/lib/util/RelayFeatureFlags.js +6 -3
  54. package/lib/util/RelayReplaySubject.js +3 -3
  55. package/lib/util/createPayloadFor3DField.js +7 -2
  56. package/lib/util/getFragmentIdentifier.js +12 -3
  57. package/lib/util/getOperation.js +33 -0
  58. package/lib/util/getRequestIdentifier.js +2 -2
  59. package/lib/util/isEmptyObject.js +25 -0
  60. package/lib/util/recycleNodesInto.js +6 -7
  61. package/lib/util/reportMissingRequiredFields.js +48 -0
  62. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  63. package/mutations/RelayRecordProxy.js.flow +165 -0
  64. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  65. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  66. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  67. package/mutations/applyOptimisticMutation.js.flow +76 -0
  68. package/mutations/commitLocalUpdate.js.flow +24 -0
  69. package/mutations/commitMutation.js.flow +181 -0
  70. package/mutations/validateMutation.js.flow +242 -0
  71. package/network/ConvertToExecuteFunction.js.flow +49 -0
  72. package/network/RelayNetwork.js.flow +84 -0
  73. package/network/RelayNetworkTypes.js.flow +145 -0
  74. package/network/RelayObservable.js.flow +634 -0
  75. package/network/RelayQueryResponseCache.js.flow +111 -0
  76. package/package.json +2 -2
  77. package/query/GraphQLTag.js.flow +168 -0
  78. package/query/PreloadableQueryRegistry.js.flow +65 -0
  79. package/query/fetchQuery.js.flow +47 -0
  80. package/query/fetchQueryInternal.js.flow +343 -0
  81. package/relay-runtime.js +2 -2
  82. package/relay-runtime.min.js +2 -2
  83. package/store/ClientID.js.flow +43 -0
  84. package/store/DataChecker.js.flow +568 -0
  85. package/store/RelayConcreteVariables.js.flow +96 -0
  86. package/store/RelayModernEnvironment.js.flow +571 -0
  87. package/store/RelayModernFragmentSpecResolver.js.flow +438 -0
  88. package/store/RelayModernOperationDescriptor.js.flow +92 -0
  89. package/store/RelayModernQueryExecutor.js.flow +1345 -0
  90. package/store/RelayModernRecord.js.flow +403 -0
  91. package/store/RelayModernSelector.js.flow +455 -0
  92. package/store/RelayModernStore.js.flow +858 -0
  93. package/store/RelayOperationTracker.js.flow +164 -0
  94. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  95. package/store/RelayPublishQueue.js.flow +401 -0
  96. package/store/RelayReader.js.flow +638 -0
  97. package/store/RelayRecordSource.js.flow +29 -0
  98. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  99. package/store/RelayRecordState.js.flow +37 -0
  100. package/store/RelayReferenceMarker.js.flow +324 -0
  101. package/store/RelayResponseNormalizer.js.flow +791 -0
  102. package/store/RelayStoreReactFlightUtils.js.flow +64 -0
  103. package/store/RelayStoreTypes.js.flow +958 -0
  104. package/store/RelayStoreUtils.js.flow +219 -0
  105. package/store/StoreInspector.js.flow +171 -0
  106. package/store/TypeID.js.flow +28 -0
  107. package/store/ViewerPattern.js.flow +26 -0
  108. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  109. package/store/cloneRelayScalarHandleSourceField.js.flow +62 -0
  110. package/store/createFragmentSpecResolver.js.flow +55 -0
  111. package/store/createRelayContext.js.flow +44 -0
  112. package/store/defaultGetDataID.js.flow +27 -0
  113. package/store/defaultRequiredFieldLogger.js.flow +23 -0
  114. package/store/hasOverlappingIDs.js.flow +34 -0
  115. package/store/isRelayModernEnvironment.js.flow +27 -0
  116. package/store/normalizeRelayPayload.js.flow +51 -0
  117. package/store/readInlineData.js.flow +75 -0
  118. package/subscription/requestSubscription.js.flow +103 -0
  119. package/util/JSResourceTypes.flow.js.flow +20 -0
  120. package/util/NormalizationNode.js.flow +213 -0
  121. package/util/ReaderNode.js.flow +227 -0
  122. package/util/RelayConcreteNode.js.flow +99 -0
  123. package/util/RelayDefaultHandleKey.js.flow +17 -0
  124. package/util/RelayError.js.flow +62 -0
  125. package/util/RelayFeatureFlags.js.flow +37 -0
  126. package/util/RelayProfiler.js.flow +284 -0
  127. package/util/RelayReplaySubject.js.flow +135 -0
  128. package/util/RelayRuntimeTypes.js.flow +72 -0
  129. package/util/createPayloadFor3DField.js.flow +43 -0
  130. package/util/deepFreeze.js.flow +36 -0
  131. package/util/generateID.js.flow +21 -0
  132. package/util/getFragmentIdentifier.js.flow +76 -0
  133. package/util/getOperation.js.flow +40 -0
  134. package/util/getRelayHandleKey.js.flow +41 -0
  135. package/util/getRequestIdentifier.js.flow +42 -0
  136. package/util/isEmptyObject.js.flow +25 -0
  137. package/util/isPromise.js.flow +21 -0
  138. package/util/isScalarAndEqual.js.flow +26 -0
  139. package/util/recycleNodesInto.js.flow +87 -0
  140. package/util/reportMissingRequiredFields.js.flow +51 -0
  141. package/util/resolveImmediate.js.flow +30 -0
  142. package/util/stableCopy.js.flow +35 -0
@@ -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');
@@ -27,29 +35,36 @@ var RelayRecordSource = require('./RelayRecordSource');
27
35
 
28
36
  var defaultGetDataID = require('./defaultGetDataID');
29
37
 
38
+ var defaultRequiredFieldLogger = require('./defaultRequiredFieldLogger');
39
+
30
40
  var generateID = require('../util/generateID');
31
41
 
32
42
  var invariant = require("fbjs/lib/invariant");
33
43
 
34
- var RelayModernEnvironment =
35
- /*#__PURE__*/
36
- function () {
44
+ var RelayModernEnvironment = /*#__PURE__*/function () {
37
45
  function RelayModernEnvironment(config) {
38
46
  var _this = this;
39
47
 
40
- var _config$log, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$operationTrac;
48
+ var _config$log, _config$requiredField, _config$UNSTABLE_defa, _config$UNSTABLE_DO_N, _config$scheduler, _config$isServer, _config$operationTrac;
41
49
 
42
50
  this.configName = config.configName;
43
51
  var handlerProvider = config.handlerProvider ? config.handlerProvider : RelayDefaultHandlerProvider;
52
+ this._treatMissingFieldsAsNull = config.treatMissingFieldsAsNull === true;
44
53
  var operationLoader = config.operationLoader;
54
+ var reactFlightPayloadDeserializer = config.reactFlightPayloadDeserializer;
45
55
 
46
56
  if (process.env.NODE_ENV !== "production") {
47
57
  if (operationLoader != null) {
48
58
  !(typeof operationLoader === 'object' && typeof operationLoader.get === 'function' && typeof operationLoader.load === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected `operationLoader` to be an object ' + 'with get() and load() functions, got `%s`.', operationLoader) : invariant(false) : void 0;
49
59
  }
60
+
61
+ if (reactFlightPayloadDeserializer != null) {
62
+ !(typeof reactFlightPayloadDeserializer === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernEnvironment: Expected `reactFlightPayloadDeserializer` ' + ' to be a function, got `%s`.', reactFlightPayloadDeserializer) : invariant(false) : void 0;
63
+ }
50
64
  }
51
65
 
52
66
  this.__log = (_config$log = config.log) !== null && _config$log !== void 0 ? _config$log : emptyFunction;
67
+ this.requiredFieldLogger = (_config$requiredField = config.requiredFieldLogger) !== null && _config$requiredField !== void 0 ? _config$requiredField : defaultRequiredFieldLogger;
53
68
  this._defaultRenderPolicy = ((_config$UNSTABLE_defa = config.UNSTABLE_defaultRenderPolicy) !== null && _config$UNSTABLE_defa !== void 0 ? _config$UNSTABLE_defa : RelayFeatureFlags.ENABLE_PARTIAL_RENDERING_DEFAULT === true) ? 'partial' : 'full';
54
69
  this._operationLoader = operationLoader;
55
70
  this._operationExecutions = new Map();
@@ -59,6 +74,7 @@ function () {
59
74
  this._scheduler = (_config$scheduler = config.scheduler) !== null && _config$scheduler !== void 0 ? _config$scheduler : null;
60
75
  this._store = config.store;
61
76
  this.options = config.options;
77
+ this._isServer = (_config$isServer = config.isServer) !== null && _config$isServer !== void 0 ? _config$isServer : false;
62
78
 
63
79
  this.__setNet = function (newNet) {
64
80
  return _this._network = newNet;
@@ -85,6 +101,7 @@ function () {
85
101
 
86
102
  this._missingFieldHandlers = config.missingFieldHandlers;
87
103
  this._operationTracker = (_config$operationTrac = config.operationTracker) !== null && _config$operationTrac !== void 0 ? _config$operationTrac : new RelayOperationTracker();
104
+ this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer;
88
105
  }
89
106
 
90
107
  var _proto = RelayModernEnvironment.prototype;
@@ -115,14 +132,18 @@ function () {
115
132
  var _this2 = this;
116
133
 
117
134
  var dispose = function dispose() {
118
- _this2._publishQueue.revertUpdate(optimisticUpdate);
135
+ _this2._scheduleUpdates(function () {
136
+ _this2._publishQueue.revertUpdate(optimisticUpdate);
119
137
 
120
- _this2._publishQueue.run();
138
+ _this2._publishQueue.run();
139
+ });
121
140
  };
122
141
 
123
- this._publishQueue.applyUpdate(optimisticUpdate);
142
+ this._scheduleUpdates(function () {
143
+ _this2._publishQueue.applyUpdate(optimisticUpdate);
124
144
 
125
- this._publishQueue.run();
145
+ _this2._publishQueue.run();
146
+ });
126
147
 
127
148
  return {
128
149
  dispose: dispose
@@ -130,37 +151,47 @@ function () {
130
151
  };
131
152
 
132
153
  _proto.revertUpdate = function revertUpdate(update) {
133
- this._publishQueue.revertUpdate(update);
154
+ var _this3 = this;
134
155
 
135
- this._publishQueue.run();
156
+ this._scheduleUpdates(function () {
157
+ _this3._publishQueue.revertUpdate(update);
158
+
159
+ _this3._publishQueue.run();
160
+ });
136
161
  };
137
162
 
138
163
  _proto.replaceUpdate = function replaceUpdate(update, newUpdate) {
139
- this._publishQueue.revertUpdate(update);
164
+ var _this4 = this;
165
+
166
+ this._scheduleUpdates(function () {
167
+ _this4._publishQueue.revertUpdate(update);
140
168
 
141
- this._publishQueue.applyUpdate(newUpdate);
169
+ _this4._publishQueue.applyUpdate(newUpdate);
142
170
 
143
- this._publishQueue.run();
171
+ _this4._publishQueue.run();
172
+ });
144
173
  };
145
174
 
146
175
  _proto.applyMutation = function applyMutation(optimisticConfig) {
147
- var _this3 = this;
176
+ var _this5 = this;
148
177
 
149
178
  var subscription = RelayObservable.create(function (sink) {
150
179
  var source = RelayObservable.create(function (_sink) {});
151
180
  var executor = RelayModernQueryExecutor.execute({
152
181
  operation: optimisticConfig.operation,
153
- operationExecutions: _this3._operationExecutions,
154
- operationLoader: _this3._operationLoader,
182
+ operationExecutions: _this5._operationExecutions,
183
+ operationLoader: _this5._operationLoader,
155
184
  optimisticConfig: optimisticConfig,
156
- publishQueue: _this3._publishQueue,
157
- scheduler: _this3._scheduler,
185
+ publishQueue: _this5._publishQueue,
186
+ reactFlightPayloadDeserializer: _this5._reactFlightPayloadDeserializer,
187
+ scheduler: _this5._scheduler,
158
188
  sink: sink,
159
189
  source: source,
160
- store: _this3._store,
190
+ store: _this5._store,
161
191
  updater: null,
162
- operationTracker: _this3._operationTracker,
163
- getDataID: _this3._getDataID
192
+ operationTracker: _this5._operationTracker,
193
+ getDataID: _this5._getDataID,
194
+ treatMissingFieldsAsNull: _this5._treatMissingFieldsAsNull
164
195
  });
165
196
  return function () {
166
197
  return executor.cancel();
@@ -182,26 +213,27 @@ function () {
182
213
  };
183
214
 
184
215
  _proto.commitPayload = function commitPayload(operation, payload) {
185
- var _this4 = this;
216
+ var _this6 = this;
186
217
 
187
218
  RelayObservable.create(function (sink) {
188
219
  var executor = RelayModernQueryExecutor.execute({
189
220
  operation: operation,
190
- operationExecutions: _this4._operationExecutions,
191
- operationLoader: _this4._operationLoader,
221
+ operationExecutions: _this6._operationExecutions,
222
+ operationLoader: _this6._operationLoader,
192
223
  optimisticConfig: null,
193
- publishQueue: _this4._publishQueue,
194
- scheduler: null,
195
- // make sure the first payload is sync
224
+ publishQueue: _this6._publishQueue,
225
+ reactFlightPayloadDeserializer: _this6._reactFlightPayloadDeserializer,
226
+ scheduler: _this6._scheduler,
196
227
  sink: sink,
197
228
  source: RelayObservable.from({
198
229
  data: payload
199
230
  }),
200
- store: _this4._store,
231
+ store: _this6._store,
201
232
  updater: null,
202
- operationTracker: _this4._operationTracker,
203
- getDataID: _this4._getDataID,
204
- isClientPayload: true
233
+ operationTracker: _this6._operationTracker,
234
+ getDataID: _this6._getDataID,
235
+ isClientPayload: true,
236
+ treatMissingFieldsAsNull: _this6._treatMissingFieldsAsNull
205
237
  });
206
238
  return function () {
207
239
  return executor.cancel();
@@ -210,9 +242,13 @@ function () {
210
242
  };
211
243
 
212
244
  _proto.commitUpdate = function commitUpdate(updater) {
213
- this._publishQueue.commitUpdate(updater);
245
+ var _this7 = this;
246
+
247
+ this._scheduleUpdates(function () {
248
+ _this7._publishQueue.commitUpdate(updater);
214
249
 
215
- this._publishQueue.run();
250
+ _this7._publishQueue.run();
251
+ });
216
252
  };
217
253
 
218
254
  _proto.lookup = function lookup(readSelector) {
@@ -227,7 +263,13 @@ function () {
227
263
  return this._store.retain(operation);
228
264
  };
229
265
 
266
+ _proto.isServer = function isServer() {
267
+ return this._isServer;
268
+ };
269
+
230
270
  _proto._checkSelectorAndHandleMissingFields = function _checkSelectorAndHandleMissingFields(operation, handlers) {
271
+ var _this8 = this;
272
+
231
273
  var target = RelayRecordSource.create();
232
274
 
233
275
  var result = this._store.check(operation, {
@@ -236,12 +278,24 @@ function () {
236
278
  });
237
279
 
238
280
  if (target.size() > 0) {
239
- this._publishQueue.commitSource(target);
281
+ this._scheduleUpdates(function () {
282
+ _this8._publishQueue.commitSource(target);
240
283
 
241
- this._publishQueue.run();
284
+ _this8._publishQueue.run();
285
+ });
242
286
  }
243
287
 
244
288
  return result;
289
+ };
290
+
291
+ _proto._scheduleUpdates = function _scheduleUpdates(task) {
292
+ var scheduler = this._scheduler;
293
+
294
+ if (scheduler != null) {
295
+ scheduler.schedule(task);
296
+ } else {
297
+ task();
298
+ }
245
299
  }
246
300
  /**
247
301
  * Returns an Observable of GraphQLResponse resulting from executing the
@@ -254,10 +308,9 @@ function () {
254
308
  ;
255
309
 
256
310
  _proto.execute = function execute(_ref) {
257
- var _this5 = this;
311
+ var _this9 = this;
258
312
 
259
313
  var operation = _ref.operation,
260
- cacheConfig = _ref.cacheConfig,
261
314
  updater = _ref.updater;
262
315
 
263
316
  var _this$__createLogObse = this.__createLogObserver(operation.request.node.params, operation.request.variables),
@@ -265,26 +318,28 @@ function () {
265
318
  logRequestInfo = _this$__createLogObse[1];
266
319
 
267
320
  return RelayObservable.create(function (sink) {
268
- var source = _this5._network.execute(operation.request.node.params, operation.request.variables, cacheConfig || {}, null, logRequestInfo);
321
+ var source = _this9._network.execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null, logRequestInfo)["do"](logObserver);
269
322
 
270
323
  var executor = RelayModernQueryExecutor.execute({
271
324
  operation: operation,
272
- operationExecutions: _this5._operationExecutions,
273
- operationLoader: _this5._operationLoader,
325
+ operationExecutions: _this9._operationExecutions,
326
+ operationLoader: _this9._operationLoader,
274
327
  optimisticConfig: null,
275
- publishQueue: _this5._publishQueue,
276
- scheduler: _this5._scheduler,
328
+ publishQueue: _this9._publishQueue,
329
+ reactFlightPayloadDeserializer: _this9._reactFlightPayloadDeserializer,
330
+ scheduler: _this9._scheduler,
277
331
  sink: sink,
278
332
  source: source,
279
- store: _this5._store,
333
+ store: _this9._store,
280
334
  updater: updater,
281
- operationTracker: _this5._operationTracker,
282
- getDataID: _this5._getDataID
335
+ operationTracker: _this9._operationTracker,
336
+ getDataID: _this9._getDataID,
337
+ treatMissingFieldsAsNull: _this9._treatMissingFieldsAsNull
283
338
  });
284
339
  return function () {
285
340
  return executor.cancel();
286
341
  };
287
- })["do"](logObserver);
342
+ });
288
343
  }
289
344
  /**
290
345
  * Returns an Observable of GraphQLResponse resulting from executing the
@@ -299,7 +354,7 @@ function () {
299
354
  ;
300
355
 
301
356
  _proto.executeMutation = function executeMutation(_ref2) {
302
- var _this6 = this;
357
+ var _this10 = this;
303
358
 
304
359
  var operation = _ref2.operation,
305
360
  optimisticResponse = _ref2.optimisticResponse,
@@ -322,28 +377,30 @@ function () {
322
377
  };
323
378
  }
324
379
 
325
- var source = _this6._network.execute(operation.request.node.params, operation.request.variables, {
380
+ var source = _this10._network.execute(operation.request.node.params, operation.request.variables, _objectSpread(_objectSpread({}, operation.request.cacheConfig), {}, {
326
381
  force: true
327
- }, uploadables, logRequestInfo);
382
+ }), uploadables, logRequestInfo)["do"](logObserver);
328
383
 
329
384
  var executor = RelayModernQueryExecutor.execute({
330
385
  operation: operation,
331
- operationExecutions: _this6._operationExecutions,
332
- operationLoader: _this6._operationLoader,
386
+ operationExecutions: _this10._operationExecutions,
387
+ operationLoader: _this10._operationLoader,
333
388
  optimisticConfig: optimisticConfig,
334
- publishQueue: _this6._publishQueue,
335
- scheduler: _this6._scheduler,
389
+ publishQueue: _this10._publishQueue,
390
+ reactFlightPayloadDeserializer: _this10._reactFlightPayloadDeserializer,
391
+ scheduler: _this10._scheduler,
336
392
  sink: sink,
337
393
  source: source,
338
- store: _this6._store,
394
+ store: _this10._store,
339
395
  updater: updater,
340
- operationTracker: _this6._operationTracker,
341
- getDataID: _this6._getDataID
396
+ operationTracker: _this10._operationTracker,
397
+ getDataID: _this10._getDataID,
398
+ treatMissingFieldsAsNull: _this10._treatMissingFieldsAsNull
342
399
  });
343
400
  return function () {
344
401
  return executor.cancel();
345
402
  };
346
- })["do"](logObserver);
403
+ });
347
404
  }
348
405
  /**
349
406
  * Returns an Observable of GraphQLResponse resulting from executing the
@@ -357,23 +414,25 @@ function () {
357
414
  ;
358
415
 
359
416
  _proto.executeWithSource = function executeWithSource(_ref3) {
360
- var _this7 = this;
417
+ var _this11 = this;
361
418
 
362
419
  var operation = _ref3.operation,
363
420
  source = _ref3.source;
364
421
  return RelayObservable.create(function (sink) {
365
422
  var executor = RelayModernQueryExecutor.execute({
366
423
  operation: operation,
367
- operationExecutions: _this7._operationExecutions,
368
- operationLoader: _this7._operationLoader,
369
- operationTracker: _this7._operationTracker,
424
+ operationExecutions: _this11._operationExecutions,
425
+ operationLoader: _this11._operationLoader,
426
+ operationTracker: _this11._operationTracker,
370
427
  optimisticConfig: null,
371
- publishQueue: _this7._publishQueue,
372
- scheduler: _this7._scheduler,
428
+ publishQueue: _this11._publishQueue,
429
+ reactFlightPayloadDeserializer: _this11._reactFlightPayloadDeserializer,
430
+ scheduler: _this11._scheduler,
373
431
  sink: sink,
374
432
  source: source,
375
- store: _this7._store,
376
- getDataID: _this7._getDataID
433
+ store: _this11._store,
434
+ getDataID: _this11._getDataID,
435
+ treatMissingFieldsAsNull: _this11._treatMissingFieldsAsNull
377
436
  });
378
437
  return function () {
379
438
  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");
@@ -24,6 +26,8 @@ var invariant = require("fbjs/lib/invariant");
24
26
 
25
27
  var isScalarAndEqual = require('../util/isScalarAndEqual');
26
28
 
29
+ var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
30
+
27
31
  var warning = require("fbjs/lib/warning");
28
32
 
29
33
  var _require = require('../query/fetchQueryInternal'),
@@ -56,9 +60,7 @@ var _require3 = require('./RelayModernSelector'),
56
60
  * the resolver as stale and notify the caller, and the actual results are
57
61
  * recomputed the first time `resolve()` is called.
58
62
  */
59
- var RelayModernFragmentSpecResolver =
60
- /*#__PURE__*/
61
- function () {
63
+ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
62
64
  function RelayModernFragmentSpecResolver(context, fragments, props, callback) {
63
65
  var _this = this;
64
66
 
@@ -105,7 +107,7 @@ function () {
105
107
  var nextItem = resolver.resolve();
106
108
 
107
109
  if (nextData || nextItem !== prevItem) {
108
- nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
110
+ nextData = nextData || _objectSpread({}, prevData);
109
111
  nextData[_key2] = nextItem;
110
112
  }
111
113
  } else {
@@ -114,7 +116,7 @@ function () {
114
116
  var _nextItem = prop !== undefined ? prop : null;
115
117
 
116
118
  if (nextData || !isScalarAndEqual(_nextItem, prevItem)) {
117
- nextData = nextData || (0, _objectSpread2["default"])({}, prevData);
119
+ nextData = nextData || _objectSpread({}, prevData);
118
120
  nextData[_key2] = _nextItem;
119
121
  }
120
122
  }
@@ -192,15 +194,14 @@ function () {
192
194
  */
193
195
 
194
196
 
195
- var SelectorResolver =
196
- /*#__PURE__*/
197
- function () {
197
+ var SelectorResolver = /*#__PURE__*/function () {
198
198
  function SelectorResolver(environment, selector, callback) {
199
199
  var _this2 = this;
200
200
 
201
201
  (0, _defineProperty2["default"])(this, "_onChange", function (snapshot) {
202
202
  _this2._data = snapshot.data;
203
203
  _this2._isMissingData = snapshot.isMissingData;
204
+ _this2._missingRequiredFields = snapshot.missingRequiredFields;
204
205
 
205
206
  _this2._callback();
206
207
  });
@@ -210,6 +211,7 @@ function () {
210
211
  this._callback = callback;
211
212
  this._data = _snapshot.data;
212
213
  this._isMissingData = _snapshot.isMissingData;
214
+ this._missingRequiredFields = _snapshot.missingRequiredFields;
213
215
  this._environment = environment;
214
216
  this._selector = selector;
215
217
  this._subscription = environment.subscribe(_snapshot, this._onChange);
@@ -258,6 +260,10 @@ function () {
258
260
  }
259
261
  }
260
262
 
263
+ if (this._missingRequiredFields != null) {
264
+ reportMissingRequiredFields(this._environment, this._missingRequiredFields);
265
+ }
266
+
261
267
  return this._data;
262
268
  };
263
269
 
@@ -272,6 +278,7 @@ function () {
272
278
 
273
279
  this._data = snapshot.data;
274
280
  this._isMissingData = snapshot.isMissingData;
281
+ this._missingRequiredFields = snapshot.missingRequiredFields;
275
282
  this._selector = selector;
276
283
  this._subscription = this._environment.subscribe(snapshot, this._onChange);
277
284
  };
@@ -289,7 +296,7 @@ function () {
289
296
  } // NOTE: We manually create the request descriptor here instead of
290
297
  // calling createOperationDescriptor() because we want to set a
291
298
  // descriptor with *unaltered* variables as the fragment owner.
292
- // This is a hack that allows us to preserve exisiting (broken)
299
+ // This is a hack that allows us to preserve existing (broken)
293
300
  // behavior of RelayModern containers while using fragment ownership
294
301
  // to propagate variables instead of Context.
295
302
  // For more details, see the summary of D13999308
@@ -307,9 +314,7 @@ function () {
307
314
  */
308
315
 
309
316
 
310
- var SelectorListResolver =
311
- /*#__PURE__*/
312
- function () {
317
+ var SelectorListResolver = /*#__PURE__*/function () {
313
318
  function SelectorListResolver(environment, selector, callback) {
314
319
  var _this3 = this;
315
320
 
@@ -30,11 +30,11 @@ var _require3 = require('./RelayStoreUtils'),
30
30
  * are filtered to exclude variables that do not match defined arguments on the
31
31
  * operation, and default values are populated for null values.
32
32
  */
33
- function createOperationDescriptor(request, variables) {
34
- var dataID = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ROOT_ID;
33
+ function createOperationDescriptor(request, variables, cacheConfig) {
34
+ var dataID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ROOT_ID;
35
35
  var operation = request.operation;
36
36
  var operationVariables = getOperationVariables(operation, variables);
37
- var requestDescriptor = createRequestDescriptor(request, operationVariables);
37
+ var requestDescriptor = createRequestDescriptor(request, operationVariables, cacheConfig);
38
38
  var operationDescriptor = {
39
39
  fragment: createReaderSelector(request.fragment, dataID, operationVariables, requestDescriptor),
40
40
  request: requestDescriptor,
@@ -53,11 +53,12 @@ function createOperationDescriptor(request, variables) {
53
53
  return operationDescriptor;
54
54
  }
55
55
 
56
- function createRequestDescriptor(request, variables) {
56
+ function createRequestDescriptor(request, variables, cacheConfig) {
57
57
  var requestDescriptor = {
58
58
  identifier: getRequestIdentifier(request.params, variables),
59
59
  node: request,
60
- variables: variables
60
+ variables: variables,
61
+ cacheConfig: cacheConfig
61
62
  };
62
63
 
63
64
  if (process.env.NODE_ENV !== "production") {