relay-runtime 7.0.0 → 9.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +34 -0
  2. package/handlers/connection/ConnectionHandler.js.flow +549 -0
  3. package/handlers/connection/ConnectionInterface.js.flow +92 -0
  4. package/index.js +1 -1
  5. package/index.js.flow +314 -0
  6. package/lib/handlers/RelayDefaultHandlerProvider.js +3 -2
  7. package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +34 -35
  8. package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +3 -30
  9. package/lib/index.js +29 -27
  10. package/lib/mutations/RelayDeclarativeMutationConfig.js +30 -52
  11. package/lib/mutations/RelayRecordProxy.js +6 -3
  12. package/lib/mutations/RelayRecordSourceMutator.js +3 -9
  13. package/lib/mutations/RelayRecordSourceProxy.js +21 -24
  14. package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -14
  15. package/lib/mutations/applyOptimisticMutation.js +2 -1
  16. package/lib/mutations/commitLocalUpdate.js +1 -0
  17. package/lib/mutations/commitMutation.js +26 -8
  18. package/lib/mutations/validateMutation.js +21 -11
  19. package/lib/network/ConvertToExecuteFunction.js +1 -0
  20. package/lib/network/RelayNetwork.js +1 -0
  21. package/lib/network/RelayNetworkTypes.js +1 -0
  22. package/lib/network/RelayObservable.js +10 -9
  23. package/lib/network/RelayQueryResponseCache.js +9 -7
  24. package/lib/query/{RelayModernGraphQLTag.js → GraphQLTag.js} +15 -8
  25. package/lib/query/fetchQuery.js +2 -1
  26. package/lib/query/fetchQueryInternal.js +30 -20
  27. package/lib/store/ClientID.js +1 -0
  28. package/lib/store/DataChecker.js +47 -97
  29. package/lib/store/RelayConcreteVariables.js +7 -2
  30. package/lib/store/RelayModernEnvironment.js +82 -41
  31. package/lib/store/RelayModernFragmentSpecResolver.js +61 -21
  32. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  33. package/lib/store/RelayModernQueryExecutor.js +476 -333
  34. package/lib/store/RelayModernRecord.js +39 -9
  35. package/lib/store/RelayModernSelector.js +2 -1
  36. package/lib/store/RelayModernStore.js +359 -371
  37. package/lib/store/RelayOperationTracker.js +36 -78
  38. package/lib/store/RelayOptimisticRecordSource.js +8 -5
  39. package/lib/store/RelayPublishQueue.js +66 -53
  40. package/lib/store/RelayReader.js +2 -24
  41. package/lib/store/RelayRecordSource.js +3 -9
  42. package/lib/store/RelayRecordSourceMapImpl.js +14 -18
  43. package/lib/store/RelayRecordState.js +1 -0
  44. package/lib/store/RelayReferenceMarker.js +8 -58
  45. package/lib/store/RelayResponseNormalizer.js +15 -144
  46. package/lib/store/RelayStoreTypes.js +1 -0
  47. package/lib/store/RelayStoreUtils.js +34 -10
  48. package/lib/store/StoreInspector.js +11 -5
  49. package/lib/store/ViewerPattern.js +1 -0
  50. package/lib/store/cloneRelayHandleSourceField.js +1 -0
  51. package/lib/store/createFragmentSpecResolver.js +1 -0
  52. package/lib/store/createRelayContext.js +1 -0
  53. package/lib/store/defaultGetDataID.js +1 -0
  54. package/lib/store/hasOverlappingIDs.js +1 -0
  55. package/lib/store/isRelayModernEnvironment.js +1 -0
  56. package/lib/store/normalizeRelayPayload.js +8 -4
  57. package/lib/store/readInlineData.js +2 -1
  58. package/lib/subscription/requestSubscription.js +6 -3
  59. package/lib/util/JSResourceTypes.flow.js +12 -0
  60. package/lib/util/NormalizationNode.js +1 -0
  61. package/lib/util/ReaderNode.js +1 -0
  62. package/lib/util/RelayConcreteNode.js +3 -0
  63. package/lib/util/RelayDefaultHandleKey.js +1 -0
  64. package/lib/util/RelayError.js +2 -1
  65. package/lib/util/RelayFeatureFlags.js +3 -2
  66. package/lib/util/RelayProfiler.js +1 -0
  67. package/lib/util/RelayReplaySubject.js +2 -3
  68. package/lib/util/RelayRuntimeTypes.js +1 -0
  69. package/lib/util/createPayloadFor3DField.js +34 -0
  70. package/lib/util/deepFreeze.js +1 -0
  71. package/lib/util/generateID.js +1 -0
  72. package/lib/util/getFragmentIdentifier.js +1 -0
  73. package/lib/util/getRelayHandleKey.js +1 -0
  74. package/lib/util/getRequestIdentifier.js +1 -0
  75. package/lib/util/isPromise.js +1 -0
  76. package/lib/util/isScalarAndEqual.js +1 -0
  77. package/lib/util/recycleNodesInto.js +1 -0
  78. package/lib/util/resolveImmediate.js +1 -0
  79. package/lib/util/stableCopy.js +1 -0
  80. package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
  81. package/mutations/RelayRecordProxy.js.flow +165 -0
  82. package/mutations/RelayRecordSourceMutator.js.flow +238 -0
  83. package/mutations/RelayRecordSourceProxy.js.flow +164 -0
  84. package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
  85. package/mutations/applyOptimisticMutation.js.flow +76 -0
  86. package/mutations/commitLocalUpdate.js.flow +24 -0
  87. package/mutations/commitMutation.js.flow +184 -0
  88. package/mutations/validateMutation.js.flow +211 -0
  89. package/network/ConvertToExecuteFunction.js.flow +49 -0
  90. package/network/RelayNetwork.js.flow +84 -0
  91. package/network/RelayNetworkTypes.js.flow +123 -0
  92. package/network/RelayObservable.js.flow +634 -0
  93. package/network/RelayQueryResponseCache.js.flow +111 -0
  94. package/package.json +1 -1
  95. package/query/GraphQLTag.js.flow +166 -0
  96. package/query/fetchQuery.js.flow +47 -0
  97. package/query/fetchQueryInternal.js.flow +349 -0
  98. package/relay-runtime.js +2 -2
  99. package/relay-runtime.min.js +2 -2
  100. package/store/ClientID.js.flow +43 -0
  101. package/store/DataChecker.js.flow +426 -0
  102. package/store/RelayConcreteVariables.js.flow +96 -0
  103. package/store/RelayModernEnvironment.js.flow +526 -0
  104. package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
  105. package/store/RelayModernOperationDescriptor.js.flow +88 -0
  106. package/store/RelayModernQueryExecutor.js.flow +1327 -0
  107. package/store/RelayModernRecord.js.flow +403 -0
  108. package/store/RelayModernSelector.js.flow +444 -0
  109. package/store/RelayModernStore.js.flow +757 -0
  110. package/store/RelayOperationTracker.js.flow +164 -0
  111. package/store/RelayOptimisticRecordSource.js.flow +119 -0
  112. package/store/RelayPublishQueue.js.flow +401 -0
  113. package/store/RelayReader.js.flow +376 -0
  114. package/store/RelayRecordSource.js.flow +29 -0
  115. package/store/RelayRecordSourceMapImpl.js.flow +87 -0
  116. package/store/RelayRecordState.js.flow +37 -0
  117. package/store/RelayReferenceMarker.js.flow +236 -0
  118. package/store/RelayResponseNormalizer.js.flow +556 -0
  119. package/store/RelayStoreTypes.js.flow +873 -0
  120. package/store/RelayStoreUtils.js.flow +218 -0
  121. package/store/StoreInspector.js.flow +173 -0
  122. package/store/ViewerPattern.js.flow +26 -0
  123. package/store/cloneRelayHandleSourceField.js.flow +66 -0
  124. package/store/createFragmentSpecResolver.js.flow +55 -0
  125. package/store/createRelayContext.js.flow +44 -0
  126. package/store/defaultGetDataID.js.flow +27 -0
  127. package/store/hasOverlappingIDs.js.flow +34 -0
  128. package/store/isRelayModernEnvironment.js.flow +27 -0
  129. package/store/normalizeRelayPayload.js.flow +51 -0
  130. package/store/readInlineData.js.flow +75 -0
  131. package/subscription/requestSubscription.js.flow +100 -0
  132. package/util/JSResourceTypes.flow.js.flow +20 -0
  133. package/util/NormalizationNode.js.flow +191 -0
  134. package/util/ReaderNode.js.flow +208 -0
  135. package/util/RelayConcreteNode.js.flow +80 -0
  136. package/util/RelayDefaultHandleKey.js.flow +17 -0
  137. package/util/RelayError.js.flow +33 -0
  138. package/util/RelayFeatureFlags.js.flow +30 -0
  139. package/util/RelayProfiler.js.flow +284 -0
  140. package/util/RelayReplaySubject.js.flow +134 -0
  141. package/util/RelayRuntimeTypes.js.flow +70 -0
  142. package/util/createPayloadFor3DField.js.flow +43 -0
  143. package/util/deepFreeze.js.flow +36 -0
  144. package/util/generateID.js.flow +21 -0
  145. package/util/getFragmentIdentifier.js.flow +52 -0
  146. package/util/getRelayHandleKey.js.flow +41 -0
  147. package/util/getRequestIdentifier.js.flow +41 -0
  148. package/util/isPromise.js.flow +21 -0
  149. package/util/isScalarAndEqual.js.flow +26 -0
  150. package/util/recycleNodesInto.js.flow +80 -0
  151. package/util/resolveImmediate.js.flow +30 -0
  152. package/util/stableCopy.js.flow +35 -0
  153. package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
  154. package/lib/store/RelayConnection.js +0 -36
  155. package/lib/store/RelayConnectionResolver.js +0 -177
  156. package/lib/store/RelayRecordSourceObjectImpl.js +0 -78
  157. package/lib/util/getFragmentSpecIdentifier.js +0 -26
@@ -7,12 +7,11 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var RelayConcreteNode = require('../util/RelayConcreteNode');
13
14
 
14
- var RelayConnection = require('./RelayConnection');
15
-
16
15
  var RelayModernRecord = require('./RelayModernRecord');
17
16
 
18
17
  var RelayStoreUtils = require('./RelayStoreUtils');
@@ -24,7 +23,6 @@ var invariant = require("fbjs/lib/invariant");
24
23
  var CONDITION = RelayConcreteNode.CONDITION,
25
24
  CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
26
25
  DEFER = RelayConcreteNode.DEFER,
27
- CONNECTION = RelayConcreteNode.CONNECTION,
28
26
  FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
29
27
  INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
30
28
  LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
@@ -36,11 +34,11 @@ var CONDITION = RelayConcreteNode.CONDITION,
36
34
  var getStorageKey = RelayStoreUtils.getStorageKey,
37
35
  getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
38
36
 
39
- function mark(recordSource, selector, references, connectionReferences, getConnectionEvents, operationLoader) {
37
+ function mark(recordSource, selector, references, operationLoader) {
40
38
  var dataID = selector.dataID,
41
39
  node = selector.node,
42
40
  variables = selector.variables;
43
- var marker = new RelayReferenceMarker(recordSource, variables, references, connectionReferences, getConnectionEvents, operationLoader);
41
+ var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
44
42
  marker.mark(node, dataID);
45
43
  }
46
44
  /**
@@ -48,15 +46,9 @@ function mark(recordSource, selector, references, connectionReferences, getConne
48
46
  */
49
47
 
50
48
 
51
- var RelayReferenceMarker =
52
- /*#__PURE__*/
53
- function () {
54
- function RelayReferenceMarker(recordSource, variables, references, connectionReferences, getConnectionEvents, operationLoader) {
55
- var _operationLoader;
56
-
57
- this._connectionReferences = connectionReferences;
58
- this._getConnectionEvents = getConnectionEvents;
59
- this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
49
+ var RelayReferenceMarker = /*#__PURE__*/function () {
50
+ function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
51
+ this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
60
52
  this._recordSource = recordSource;
61
53
  this._references = references;
62
54
  this._variables = variables;
@@ -161,11 +153,6 @@ function () {
161
153
 
162
154
  break;
163
155
 
164
- case CONNECTION:
165
- _this._traverseConnection(selection, record);
166
-
167
- break;
168
-
169
156
  default:
170
157
  selection;
171
158
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
@@ -173,43 +160,6 @@ function () {
173
160
  });
174
161
  };
175
162
 
176
- _proto._traverseConnection = function _traverseConnection(connection, record) {
177
- var _this2 = this;
178
-
179
- var parentID = RelayModernRecord.getDataID(record);
180
- var connectionID = RelayConnection.createConnectionID(parentID, connection.label);
181
-
182
- if (this._connectionReferences.has(connectionID)) {
183
- return;
184
- }
185
-
186
- this._connectionReferences.add(connectionID);
187
-
188
- var connectionEvents = this._getConnectionEvents(connectionID);
189
-
190
- if (connectionEvents == null || connectionEvents.length === 0) {
191
- return;
192
- }
193
-
194
- connectionEvents.forEach(function (event) {
195
- if (event.kind === 'fetch') {
196
- event.edgeIDs.forEach(function (edgeID) {
197
- if (edgeID != null) {
198
- _this2._traverse(connection.edges, edgeID);
199
- }
200
- });
201
- } else if (event.kind === 'insert') {
202
- _this2._traverse(connection.edges, event.edgeID);
203
- } else if (event.kind === 'stream.edge') {
204
- _this2._traverse(connection.edges, event.edgeID);
205
- } else if (event.kind === 'stream.pageInfo') {// no-op
206
- } else {
207
- event;
208
- !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unexpected connection event kind `%s`.', event.kind) : invariant(false) : void 0;
209
- }
210
- });
211
- };
212
-
213
163
  _proto._traverseModuleImport = function _traverseModuleImport(moduleImport, record) {
214
164
  var operationLoader = this._operationLoader;
215
165
  !(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`.') : invariant(false) : void 0;
@@ -242,7 +192,7 @@ function () {
242
192
  };
243
193
 
244
194
  _proto._traversePluralLink = function _traversePluralLink(field, record) {
245
- var _this3 = this;
195
+ var _this2 = this;
246
196
 
247
197
  var storageKey = getStorageKey(field, this._variables);
248
198
  var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
@@ -253,7 +203,7 @@ function () {
253
203
 
254
204
  linkedIDs.forEach(function (linkedID) {
255
205
  if (linkedID != null) {
256
- _this3._traverse(field, linkedID);
206
+ _this2._traverse(field, linkedID);
257
207
  }
258
208
  });
259
209
  };
@@ -7,16 +7,13 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
14
 
14
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
15
16
 
16
- var RelayConnection = require('./RelayConnection');
17
-
18
- var RelayConnectionInterface = require('../handlers/connection/RelayConnectionInterface');
19
-
20
17
  var RelayModernRecord = require('./RelayModernRecord');
21
18
 
22
19
  var RelayProfiler = require('../util/RelayProfiler');
@@ -29,7 +26,6 @@ var _require = require('../util/RelayConcreteNode'),
29
26
  CONDITION = _require.CONDITION,
30
27
  CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
31
28
  DEFER = _require.DEFER,
32
- CONNECTION = _require.CONNECTION,
33
29
  INLINE_FRAGMENT = _require.INLINE_FRAGMENT,
34
30
  LINKED_FIELD = _require.LINKED_FIELD,
35
31
  LINKED_HANDLE = _require.LINKED_HANDLE,
@@ -46,13 +42,13 @@ var _require3 = require('./RelayModernSelector'),
46
42
  createNormalizationSelector = _require3.createNormalizationSelector;
47
43
 
48
44
  var _require4 = require('./RelayStoreUtils'),
49
- formatStorageKey = _require4.formatStorageKey,
50
45
  getArgumentValues = _require4.getArgumentValues,
51
46
  getHandleStorageKey = _require4.getHandleStorageKey,
52
47
  getModuleComponentKey = _require4.getModuleComponentKey,
53
48
  getModuleOperationKey = _require4.getModuleOperationKey,
54
49
  getStorageKey = _require4.getStorageKey,
55
- TYPENAME_KEY = _require4.TYPENAME_KEY;
50
+ TYPENAME_KEY = _require4.TYPENAME_KEY,
51
+ ROOT_ID = _require4.ROOT_ID;
56
52
 
57
53
  /**
58
54
  * Normalizes the results of a query and standard GraphQL response, writing the
@@ -72,13 +68,11 @@ function normalize(recordSource, selector, response, options) {
72
68
  */
73
69
 
74
70
 
75
- var RelayResponseNormalizer =
76
- /*#__PURE__*/
77
- function () {
71
+ var RelayResponseNormalizer = /*#__PURE__*/function () {
78
72
  function RelayResponseNormalizer(recordSource, variables, options) {
79
- this._connectionEvents = [];
80
73
  this._getDataId = options.getDataID;
81
74
  this._handleFieldPayloads = [];
75
+ this._treatMissingFieldsAsNull = options.treatMissingFieldsAsNull;
82
76
  this._incrementalPlaceholders = [];
83
77
  this._isClientExtension = false;
84
78
  this._moduleImportPayloads = [];
@@ -98,12 +92,12 @@ function () {
98
92
  this._traverseSelections(node, record, data);
99
93
 
100
94
  return {
101
- connectionEvents: this._connectionEvents,
102
95
  errors: null,
103
96
  fieldPayloads: this._handleFieldPayloads,
104
97
  incrementalPlaceholders: this._incrementalPlaceholders,
105
98
  moduleImportPayloads: this._moduleImportPayloads,
106
- source: this._recordSource
99
+ source: this._recordSource,
100
+ isFinal: false
107
101
  };
108
102
  };
109
103
 
@@ -187,11 +181,6 @@ function () {
187
181
  this._isClientExtension = isClientExtension;
188
182
  break;
189
183
 
190
- case CONNECTION:
191
- this._normalizeConnection(node, selection, record, data);
192
-
193
- break;
194
-
195
184
  default:
196
185
  selection;
197
186
  !false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
@@ -251,16 +240,14 @@ function () {
251
240
  };
252
241
 
253
242
  _proto._normalizeModuleImport = function _normalizeModuleImport(parent, moduleImport, record, data) {
254
- var _componentReference, _operationReference;
255
-
256
243
  !(typeof data === 'object' && data) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected data for @module to be an object.') : invariant(false) : void 0;
257
244
  var typeName = RelayModernRecord.getType(record);
258
245
  var componentKey = getModuleComponentKey(moduleImport.documentName);
259
246
  var componentReference = data[componentKey];
260
- RelayModernRecord.setValue(record, componentKey, (_componentReference = componentReference) !== null && _componentReference !== void 0 ? _componentReference : null);
247
+ RelayModernRecord.setValue(record, componentKey, componentReference !== null && componentReference !== void 0 ? componentReference : null);
261
248
  var operationKey = getModuleOperationKey(moduleImport.documentName);
262
249
  var operationReference = data[operationKey];
263
- RelayModernRecord.setValue(record, operationKey, (_operationReference = operationReference) !== null && _operationReference !== void 0 ? _operationReference : null);
250
+ RelayModernRecord.setValue(record, operationKey, operationReference !== null && operationReference !== void 0 ? operationReference : null);
264
251
 
265
252
  if (operationReference != null) {
266
253
  this._moduleImportPayloads.push({
@@ -272,122 +259,6 @@ function () {
272
259
  variables: this._variables
273
260
  });
274
261
  }
275
- }
276
- /**
277
- * Connections are represented in the AST as a LinkedField (with connection-
278
- * specific args like after/first stripped) that wraps any metadata fields
279
- * such as count, plus a Connection node that represents the page of data
280
- * being fetched (the edges + pageInfo). The outer LinkedField is normalized
281
- * like any other, and the Connection field is normalized by synthesizing
282
- * a record to represent the page that was fetched and normalizing the edges
283
- * and pageInfo into that page record - as well as recording a "fetch" event.
284
- */
285
- ;
286
-
287
- _proto._normalizeConnection = function _normalizeConnection(parent, selection, record, data) {
288
- // Normalize the data for the page
289
- var parentID = RelayModernRecord.getDataID(record);
290
- var args = selection.args != null ? getArgumentValues(selection.args, this._variables) : {};
291
- var pageStorageKey = formatStorageKey('__connection_page', args);
292
- var pageID = generateClientID(parentID, pageStorageKey);
293
-
294
- var pageRecord = this._recordSource.get(pageID);
295
-
296
- if (pageRecord == null) {
297
- pageRecord = RelayModernRecord.create(pageID, '__ConnectionPage');
298
-
299
- this._recordSource.set(pageID, pageRecord);
300
- }
301
-
302
- RelayModernRecord.setLinkedRecordID(record, pageStorageKey, pageID);
303
-
304
- this._normalizeField(parent, selection.edges, pageRecord, data);
305
-
306
- this._normalizeField(parent, selection.pageInfo, pageRecord, data); // Construct a "fetch" connection event
307
-
308
-
309
- var connectionID = RelayConnection.createConnectionID(parentID, selection.label);
310
-
311
- var _RelayConnectionInter = RelayConnectionInterface.get(),
312
- EDGES = _RelayConnectionInter.EDGES,
313
- END_CURSOR = _RelayConnectionInter.END_CURSOR,
314
- HAS_NEXT_PAGE = _RelayConnectionInter.HAS_NEXT_PAGE,
315
- HAS_PREV_PAGE = _RelayConnectionInter.HAS_PREV_PAGE,
316
- PAGE_INFO = _RelayConnectionInter.PAGE_INFO,
317
- START_CURSOR = _RelayConnectionInter.START_CURSOR;
318
-
319
- var edgeIDs = RelayModernRecord.getLinkedRecordIDs(pageRecord, EDGES);
320
-
321
- if (edgeIDs == null) {
322
- return;
323
- }
324
-
325
- var pageInfoID = RelayModernRecord.getLinkedRecordID(pageRecord, PAGE_INFO);
326
- var pageInfoRecord = pageInfoID != null ? this._recordSource.get(pageInfoID) : null;
327
- var endCursor;
328
- var hasNextPage;
329
- var hasPrevPage;
330
- var startCursor;
331
-
332
- if (pageInfoRecord != null) {
333
- endCursor = RelayModernRecord.getValue(pageInfoRecord, END_CURSOR);
334
- hasNextPage = RelayModernRecord.getValue(pageInfoRecord, HAS_NEXT_PAGE);
335
- hasPrevPage = RelayModernRecord.getValue(pageInfoRecord, HAS_PREV_PAGE);
336
- startCursor = RelayModernRecord.getValue(pageInfoRecord, START_CURSOR);
337
- } // If streaming is enabled, also emit incremental placeholders for the
338
- // edges and pageInfo
339
-
340
-
341
- var stream = selection.stream;
342
- var enableStream = stream != null ? stream["if"].kind === 'Variable' ? this._variables[stream["if"].variableName] : stream["if"].value : false;
343
-
344
- if (stream != null && enableStream === true) {
345
- this._incrementalPlaceholders.push({
346
- kind: 'connection_edge',
347
- args: args,
348
- connectionID: connectionID,
349
- label: stream.streamLabel,
350
- path: (0, _toConsumableArray2["default"])(this._path),
351
- parentID: pageID,
352
- node: selection.edges,
353
- variables: this._variables
354
- });
355
-
356
- this._incrementalPlaceholders.push({
357
- kind: 'connection_page_info',
358
- args: args,
359
- connectionID: connectionID,
360
- data: data,
361
- label: stream.deferLabel,
362
- path: (0, _toConsumableArray2["default"])(this._path),
363
- selector: createNormalizationSelector({
364
- alias: null,
365
- args: null,
366
- concreteType: RelayModernRecord.getType(pageRecord),
367
- kind: 'LinkedField',
368
- name: '',
369
- plural: false,
370
- selections: [selection.pageInfo],
371
- storageKey: null
372
- }, pageID, this._variables),
373
- typeName: RelayModernRecord.getType(pageRecord)
374
- });
375
- }
376
-
377
- this._connectionEvents.push({
378
- kind: 'fetch',
379
- connectionID: connectionID,
380
- args: args,
381
- edgeIDs: edgeIDs,
382
- pageInfo: {
383
- endCursor: typeof endCursor === 'string' ? endCursor : null,
384
- startCursor: typeof startCursor === 'string' ? startCursor : null,
385
- hasNextPage: typeof hasNextPage === 'boolean' ? hasNextPage : null,
386
- hasPrevPage: typeof hasPrevPage === 'boolean' ? hasPrevPage : null
387
- },
388
- request: this._request,
389
- stream: enableStream === true
390
- });
391
262
  };
392
263
 
393
264
  _proto._normalizeField = function _normalizeField(parent, selection, record, data) {
@@ -397,7 +268,7 @@ function () {
397
268
  var fieldValue = data[responseKey];
398
269
 
399
270
  if (fieldValue == null) {
400
- if (fieldValue === undefined) {
271
+ if (!this._treatMissingFieldsAsNull && fieldValue === undefined) {
401
272
  // Fields that are missing in the response are not set on the record.
402
273
  // There are three main cases where this can occur:
403
274
  // - Inside a client extension: the server will not generally return
@@ -540,14 +411,14 @@ function () {
540
411
  var _field$concreteType3;
541
412
 
542
413
  var typeName = (_field$concreteType3 = field.concreteType) !== null && _field$concreteType3 !== void 0 ? _field$concreteType3 : this._getRecordType(payload);
543
- process.env.NODE_ENV !== "production" ? warning(isClientID(RelayModernRecord.getDataID(record)) || RelayModernRecord.getType(record) === typeName, 'RelayResponseNormalizer: Invalid record `%s`. Expected %s to be ' + 'consistent, but the record was assigned conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', RelayModernRecord.getDataID(record), TYPENAME_KEY, RelayModernRecord.getType(record), typeName) : void 0;
414
+ var dataID = RelayModernRecord.getDataID(record);
415
+ process.env.NODE_ENV !== "production" ? warning(isClientID(dataID) && dataID !== ROOT_ID || RelayModernRecord.getType(record) === typeName, 'RelayResponseNormalizer: Invalid record `%s`. Expected %s to be ' + 'consistent, but the record was assigned conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', dataID, TYPENAME_KEY, RelayModernRecord.getType(record), typeName) : void 0;
544
416
  };
545
417
 
546
418
  return RelayResponseNormalizer;
547
- }(); // eslint-disable-next-line no-func-assign
548
-
419
+ }();
549
420
 
550
- normalize = RelayProfiler.instrument('RelayResponseNormalizer.normalize', normalize);
421
+ var instrumentedNormalize = RelayProfiler.instrument('RelayResponseNormalizer.normalize', normalize);
551
422
  module.exports = {
552
- normalize: normalize
423
+ normalize: instrumentedNormalize
553
424
  };
@@ -7,4 +7,5 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
@@ -21,24 +22,44 @@ var invariant = require("fbjs/lib/invariant");
21
22
 
22
23
  var stableCopy = require('../util/stableCopy');
23
24
 
24
- var VARIABLE = RelayConcreteNode.VARIABLE;
25
+ var VARIABLE = RelayConcreteNode.VARIABLE,
26
+ LITERAL = RelayConcreteNode.LITERAL,
27
+ OBJECT_VALUE = RelayConcreteNode.OBJECT_VALUE,
28
+ LIST_VALUE = RelayConcreteNode.LIST_VALUE;
25
29
  var MODULE_COMPONENT_KEY_PREFIX = '__module_component_';
26
30
  var MODULE_OPERATION_KEY_PREFIX = '__module_operation_';
31
+
32
+ function getArgumentValue(arg, variables) {
33
+ if (arg.kind === VARIABLE) {
34
+ // Variables are provided at runtime and are not guaranteed to be stable.
35
+ return getStableVariableValue(arg.variableName, variables);
36
+ } else if (arg.kind === LITERAL) {
37
+ // The Relay compiler generates stable ConcreteArgument values.
38
+ return arg.value;
39
+ } else if (arg.kind === OBJECT_VALUE) {
40
+ var value = {};
41
+ arg.fields.forEach(function (field) {
42
+ value[field.name] = getArgumentValue(field, variables);
43
+ });
44
+ return value;
45
+ } else if (arg.kind === LIST_VALUE) {
46
+ var _value = [];
47
+ arg.items.forEach(function (item) {
48
+ item != null ? _value.push(getArgumentValue(item, variables)) : null;
49
+ });
50
+ return _value;
51
+ }
52
+ }
27
53
  /**
28
54
  * Returns the values of field/fragment arguments as an object keyed by argument
29
55
  * names. Guaranteed to return a result with stable ordered nested values.
30
56
  */
31
57
 
58
+
32
59
  function getArgumentValues(args, variables) {
33
60
  var values = {};
34
61
  args.forEach(function (arg) {
35
- if (arg.kind === VARIABLE) {
36
- // Variables are provided at runtime and are not guaranteed to be stable.
37
- values[arg.name] = getStableVariableValue(arg.variableName, variables);
38
- } else {
39
- // The Relay compiler generates stable ConcreteArgument values.
40
- values[arg.name] = arg.value;
41
- }
62
+ values[arg.name] = getArgumentValue(arg, variables);
42
63
  });
43
64
  return values;
44
65
  }
@@ -138,8 +159,9 @@ function formatStorageKey(name, argValues) {
138
159
  var value = argValues[argName];
139
160
 
140
161
  if (value != null) {
141
- // $FlowFixMe(>=0.95.0) JSON.stringify can return undefined
142
- values.push(argName + ':' + JSON.stringify(value));
162
+ var _JSON$stringify;
163
+
164
+ values.push(argName + ':' + ((_JSON$stringify = JSON.stringify(value)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : 'undefined'));
143
165
  }
144
166
  }
145
167
  }
@@ -181,7 +203,9 @@ var RelayStoreUtils = {
181
203
  ROOT_ID: 'client:root',
182
204
  ROOT_TYPE: '__Root',
183
205
  TYPENAME_KEY: '__typename',
206
+ INVALIDATED_AT_KEY: '__invalidated_at',
184
207
  formatStorageKey: formatStorageKey,
208
+ getArgumentValue: getArgumentValue,
185
209
  getArgumentValues: getArgumentValues,
186
210
  getHandleStorageKey: getHandleStorageKey,
187
211
  getStorageKey: getStorageKey,
@@ -8,14 +8,19 @@
8
8
  * @format
9
9
  * @emails oncall+relay
10
10
  */
11
+ // flowlint ambiguous-object-type:error
11
12
  'use strict';
12
13
 
13
14
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
15
 
15
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
16
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
17
 
17
18
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
18
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
+
19
24
  var inspect = function inspect() {};
20
25
 
21
26
  if (process.env.NODE_ENV !== "production") {
@@ -133,7 +138,7 @@ if (process.env.NODE_ENV !== "production") {
133
138
  return record;
134
139
  }
135
140
 
136
- return new Proxy((0, _objectSpread2["default"])({}, record), {
141
+ return new Proxy(_objectSpread({}, record), {
137
142
  get: function get(target, prop) {
138
143
  var value = target[prop];
139
144
 
@@ -147,6 +152,9 @@ if (process.env.NODE_ENV !== "production") {
147
152
  }
148
153
 
149
154
  if (Array.isArray(value.__refs)) {
155
+ /* $FlowFixMe(>=0.111.0) This comment suppresses an error found
156
+ * when Flow v0.111.0 was deployed. To see the error, delete this
157
+ * comment and run Flow. */
150
158
  return value.__refs.map(function (ref) {
151
159
  return getWrappedRecord(source, ref);
152
160
  });
@@ -159,10 +167,8 @@ if (process.env.NODE_ENV !== "production") {
159
167
  };
160
168
 
161
169
  inspect = function inspect(environment, dataID) {
162
- var _dataID;
163
-
164
170
  installDevtoolFormatters();
165
- return getWrappedRecord(environment.getStore().getSource(), (_dataID = dataID) !== null && _dataID !== void 0 ? _dataID : 'client:root');
171
+ return getWrappedRecord(environment.getStore().getSource(), dataID !== null && dataID !== void 0 ? dataID : 'client:root');
166
172
  };
167
173
  }
168
174
 
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _require = require('./ClientID'),
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var areEqual = require("fbjs/lib/areEqual");
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var RelayModernFragmentSpecResolver = require('./RelayModernFragmentSpecResolver');
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var invariant = require("fbjs/lib/invariant");
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _require = require('./ViewerPattern'),
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -7,6 +7,7 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
  /**
12
13
  * Determine if a given value is an object that implements the `Environment`
@@ -7,11 +7,16 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
13
14
 
14
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+
17
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
18
+
19
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
15
20
 
16
21
  var RelayModernRecord = require('./RelayModernRecord');
17
22
 
@@ -20,14 +25,13 @@ var RelayRecordSource = require('./RelayRecordSource');
20
25
  var RelayResponseNormalizer = require('./RelayResponseNormalizer');
21
26
 
22
27
  var _require = require('./RelayStoreUtils'),
23
- ROOT_ID = _require.ROOT_ID,
24
28
  ROOT_TYPE = _require.ROOT_TYPE;
25
29
 
26
30
  function normalizeRelayPayload(selector, payload, errors, options) {
27
31
  var source = RelayRecordSource.create();
28
- source.set(ROOT_ID, RelayModernRecord.create(ROOT_ID, ROOT_TYPE));
32
+ source.set(selector.dataID, RelayModernRecord.create(selector.dataID, ROOT_TYPE));
29
33
  var relayPayload = RelayResponseNormalizer.normalize(source, selector, payload, options);
30
- return (0, _objectSpread2["default"])({}, relayPayload, {
34
+ return _objectSpread({}, relayPayload, {
31
35
  errors: errors
32
36
  });
33
37
  }
@@ -7,11 +7,12 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var invariant = require("fbjs/lib/invariant");
13
14
 
14
- var _require = require('../query/RelayModernGraphQLTag'),
15
+ var _require = require('../query/GraphQLTag'),
15
16
  getInlineDataFragment = _require.getInlineDataFragment;
16
17
 
17
18
  var _require2 = require('./RelayStoreUtils'),
@@ -7,13 +7,14 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var RelayDeclarativeMutationConfig = require('../mutations/RelayDeclarativeMutationConfig');
13
14
 
14
15
  var warning = require("fbjs/lib/warning");
15
16
 
16
- var _require = require('../query/RelayModernGraphQLTag'),
17
+ var _require = require('../query/GraphQLTag'),
17
18
  getRequest = _require.getRequest;
18
19
 
19
20
  var _require2 = require('../store/RelayModernOperationDescriptor'),
@@ -30,7 +31,8 @@ function requestSubscription(environment, config) {
30
31
  onCompleted = config.onCompleted,
31
32
  onError = config.onError,
32
33
  onNext = config.onNext,
33
- variables = config.variables;
34
+ variables = config.variables,
35
+ cacheConfig = config.cacheConfig;
34
36
  var operation = createOperationDescriptor(subscription, variables);
35
37
  process.env.NODE_ENV !== "production" ? warning(!(config.updater && configs), 'requestSubscription: Expected only one of `updater` and `configs` to be provided') : void 0;
36
38
 
@@ -41,7 +43,8 @@ function requestSubscription(environment, config) {
41
43
 
42
44
  var sub = environment.execute({
43
45
  operation: operation,
44
- updater: updater
46
+ updater: updater,
47
+ cacheConfig: cacheConfig
45
48
  }).map(function () {
46
49
  var data = environment.lookup(operation.fragment).data; // $FlowFixMe
47
50