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
package/lib/index.js CHANGED
@@ -7,17 +7,18 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
- var RelayConcreteNode = require('./util/RelayConcreteNode');
13
+ var ConnectionHandler = require('./handlers/connection/ConnectionHandler');
13
14
 
14
- var RelayConcreteVariables = require('./store/RelayConcreteVariables');
15
+ var ConnectionInterface = require('./handlers/connection/ConnectionInterface');
15
16
 
16
- var RelayConnectionHandler = require('./handlers/connection/RelayConnectionHandler');
17
+ var GraphQLTag = require('./query/GraphQLTag');
17
18
 
18
- var RelayConnectionInterface = require('./handlers/connection/RelayConnectionInterface');
19
+ var RelayConcreteNode = require('./util/RelayConcreteNode');
19
20
 
20
- var RelayConnectionResolver = require('./store/RelayConnectionResolver');
21
+ var RelayConcreteVariables = require('./store/RelayConcreteVariables');
21
22
 
22
23
  var RelayDeclarativeMutationConfig = require('./mutations/RelayDeclarativeMutationConfig');
23
24
 
@@ -25,16 +26,12 @@ var RelayDefaultHandleKey = require('./util/RelayDefaultHandleKey');
25
26
 
26
27
  var RelayDefaultHandlerProvider = require('./handlers/RelayDefaultHandlerProvider');
27
28
 
28
- var RelayDefaultMissingFieldHandlers = require('./handlers/RelayDefaultMissingFieldHandlers');
29
-
30
29
  var RelayError = require('./util/RelayError');
31
30
 
32
31
  var RelayFeatureFlags = require('./util/RelayFeatureFlags');
33
32
 
34
33
  var RelayModernEnvironment = require('./store/RelayModernEnvironment');
35
34
 
36
- var RelayModernGraphQLTag = require('./query/RelayModernGraphQLTag');
37
-
38
35
  var RelayModernOperationDescriptor = require('./store/RelayModernOperationDescriptor');
39
36
 
40
37
  var RelayModernRecord = require('./store/RelayModernRecord');
@@ -55,6 +52,8 @@ var RelayQueryResponseCache = require('./network/RelayQueryResponseCache');
55
52
 
56
53
  var RelayRecordSource = require('./store/RelayRecordSource');
57
54
 
55
+ var RelayReplaySubject = require('./util/RelayReplaySubject');
56
+
58
57
  var RelayStoreUtils = require('./store/RelayStoreUtils');
59
58
 
60
59
  var ViewerPattern = require('./store/ViewerPattern');
@@ -67,6 +66,8 @@ var commitMutation = require('./mutations/commitMutation');
67
66
 
68
67
  var createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
69
68
 
69
+ var createPayloadFor3DField = require('./util/createPayloadFor3DField');
70
+
70
71
  var createRelayContext = require('./store/createRelayContext');
71
72
 
72
73
  var deepFreeze = require('./util/deepFreeze');
@@ -77,10 +78,10 @@ var fetchQueryInternal = require('./query/fetchQueryInternal');
77
78
 
78
79
  var getFragmentIdentifier = require('./util/getFragmentIdentifier');
79
80
 
80
- var getFragmentSpecIdentifier = require('./util/getFragmentSpecIdentifier');
81
-
82
81
  var getRelayHandleKey = require('./util/getRelayHandleKey');
83
82
 
83
+ var getRequestIdentifier = require('./util/getRequestIdentifier');
84
+
84
85
  var isPromise = require('./util/isPromise');
85
86
 
86
87
  var isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
@@ -97,7 +98,8 @@ var stableCopy = require('./util/stableCopy');
97
98
 
98
99
  var _require = require('./store/ClientID'),
99
100
  generateClientID = _require.generateClientID,
100
- generateUniqueClientID = _require.generateUniqueClientID;
101
+ generateUniqueClientID = _require.generateUniqueClientID,
102
+ isClientID = _require.isClientID;
101
103
 
102
104
  // As early as possible, check for the existence of the JavaScript globals which
103
105
  // Relay Runtime relies upon, and produce a clear message if they do not exist.
@@ -124,6 +126,7 @@ module.exports = {
124
126
  QueryResponseCache: RelayQueryResponseCache,
125
127
  RecordSource: RelayRecordSource,
126
128
  Record: RelayModernRecord,
129
+ ReplaySubject: RelayReplaySubject,
127
130
  Store: RelayModernStore,
128
131
  areEqualSelectors: RelayModernSelector.areEqualSelectors,
129
132
  createFragmentSpecResolver: createFragmentSpecResolver,
@@ -133,14 +136,15 @@ module.exports = {
133
136
  createRequestDescriptor: RelayModernOperationDescriptor.createRequestDescriptor,
134
137
  getDataIDsFromFragment: RelayModernSelector.getDataIDsFromFragment,
135
138
  getDataIDsFromObject: RelayModernSelector.getDataIDsFromObject,
136
- getFragment: RelayModernGraphQLTag.getFragment,
137
- getInlineDataFragment: RelayModernGraphQLTag.getInlineDataFragment,
139
+ getFragment: GraphQLTag.getFragment,
140
+ getInlineDataFragment: GraphQLTag.getInlineDataFragment,
138
141
  getModuleComponentKey: RelayStoreUtils.getModuleComponentKey,
139
142
  getModuleOperationKey: RelayStoreUtils.getModuleOperationKey,
140
- getPaginationFragment: RelayModernGraphQLTag.getPaginationFragment,
143
+ getPaginationFragment: GraphQLTag.getPaginationFragment,
141
144
  getPluralSelector: RelayModernSelector.getPluralSelector,
142
- getRefetchableFragment: RelayModernGraphQLTag.getRefetchableFragment,
143
- getRequest: RelayModernGraphQLTag.getRequest,
145
+ getRefetchableFragment: GraphQLTag.getRefetchableFragment,
146
+ getRequest: GraphQLTag.getRequest,
147
+ getRequestIdentifier: getRequestIdentifier,
144
148
  getSelector: RelayModernSelector.getSelector,
145
149
  getSelectorsFromObject: RelayModernSelector.getSelectorsFromObject,
146
150
  getSingularSelector: RelayModernSelector.getSingularSelector,
@@ -149,16 +153,14 @@ module.exports = {
149
153
  getVariablesFromObject: RelayModernSelector.getVariablesFromObject,
150
154
  getVariablesFromPluralFragment: RelayModernSelector.getVariablesFromPluralFragment,
151
155
  getVariablesFromSingularFragment: RelayModernSelector.getVariablesFromSingularFragment,
152
- graphql: RelayModernGraphQLTag.graphql,
156
+ graphql: GraphQLTag.graphql,
153
157
  readInlineData: readInlineData,
154
158
  // Declarative mutation API
155
159
  MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
156
160
  RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
157
161
  // Extensions
158
162
  DefaultHandlerProvider: RelayDefaultHandlerProvider,
159
- DefaultMissingFieldHandlers: RelayDefaultMissingFieldHandlers,
160
- ConnectionHandler: RelayConnectionHandler,
161
- ConnectionResolver_UNSTABLE: RelayConnectionResolver,
163
+ ConnectionHandler: ConnectionHandler,
162
164
  VIEWER_ID: ViewerPattern.VIEWER_ID,
163
165
  VIEWER_TYPE: ViewerPattern.VIEWER_TYPE,
164
166
  // Helpers (can be implemented via the above API)
@@ -169,9 +171,10 @@ module.exports = {
169
171
  isRelayModernEnvironment: isRelayModernEnvironment,
170
172
  requestSubscription: requestSubscription,
171
173
  // Configuration interface for legacy or special uses
172
- ConnectionInterface: RelayConnectionInterface,
174
+ ConnectionInterface: ConnectionInterface,
173
175
  // Utilities
174
176
  RelayProfiler: RelayProfiler,
177
+ createPayloadFor3DField: createPayloadFor3DField,
175
178
  // INTERNAL-ONLY: These exports might be removed at any point.
176
179
  RelayConcreteNode: RelayConcreteNode,
177
180
  RelayError: RelayError,
@@ -189,20 +192,19 @@ module.exports = {
189
192
  generateClientID: generateClientID,
190
193
  generateUniqueClientID: generateUniqueClientID,
191
194
  getRelayHandleKey: getRelayHandleKey,
195
+ isClientID: isClientID,
192
196
  isPromise: isPromise,
193
197
  isScalarAndEqual: isScalarAndEqual,
194
198
  recycleNodesInto: recycleNodesInto,
195
199
  stableCopy: stableCopy,
196
200
  getFragmentIdentifier: getFragmentIdentifier,
197
- getFragmentSpecIdentifier: getFragmentSpecIdentifier,
198
201
  __internal: {
199
202
  OperationTracker: RelayOperationTracker,
200
203
  createRelayContext: createRelayContext,
201
- getModernOperationVariables: RelayConcreteVariables.getOperationVariables,
204
+ getOperationVariables: RelayConcreteVariables.getOperationVariables,
202
205
  fetchQuery: fetchQueryInternal.fetchQuery,
203
206
  fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
204
- getPromiseForRequestInFlight: fetchQueryInternal.getPromiseForRequestInFlight,
205
- getObservableForRequestInFlight: fetchQueryInternal.getObservableForRequestInFlight,
206
- hasRequestInFlight: fetchQueryInternal.hasRequestInFlight
207
+ getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
208
+ getObservableForActiveRequest: fetchQueryInternal.getObservableForActiveRequest
207
209
  }
208
210
  };
@@ -7,9 +7,16 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
- var RelayConnectionHandler = require('../handlers/connection/RelayConnectionHandler');
13
+ function _createForOfIteratorHelper(o) { if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) { var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var it, normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
14
+
15
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(n); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
16
+
17
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
18
+
19
+ var ConnectionHandler = require('../handlers/connection/ConnectionHandler');
13
20
 
14
21
  var warning = require("fbjs/lib/warning");
15
22
 
@@ -128,25 +135,25 @@ function rangeAdd(config, request) {
128
135
  }
129
136
 
130
137
  var serverEdge = payload.getLinkedRecord(edgeName);
131
- var _iteratorNormalCompletion = true;
132
- var _didIteratorError = false;
133
- var _iteratorError = undefined;
138
+
139
+ var _iterator = _createForOfIteratorHelper(connectionInfo),
140
+ _step;
134
141
 
135
142
  try {
136
- for (var _iterator = connectionInfo[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
143
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
137
144
  var info = _step.value;
138
145
 
139
146
  if (!serverEdge) {
140
147
  continue;
141
148
  }
142
149
 
143
- var connection = RelayConnectionHandler.getConnection(parent, info.key, info.filters);
150
+ var connection = ConnectionHandler.getConnection(parent, info.key, info.filters);
144
151
 
145
152
  if (!connection) {
146
153
  continue;
147
154
  }
148
155
 
149
- var clientEdge = RelayConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
156
+ var clientEdge = ConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
150
157
 
151
158
  if (!clientEdge) {
152
159
  continue;
@@ -154,11 +161,11 @@ function rangeAdd(config, request) {
154
161
 
155
162
  switch (info.rangeBehavior) {
156
163
  case 'append':
157
- RelayConnectionHandler.insertEdgeAfter(connection, clientEdge);
164
+ ConnectionHandler.insertEdgeAfter(connection, clientEdge);
158
165
  break;
159
166
 
160
167
  case 'prepend':
161
- RelayConnectionHandler.insertEdgeBefore(connection, clientEdge);
168
+ ConnectionHandler.insertEdgeBefore(connection, clientEdge);
162
169
  break;
163
170
 
164
171
  default:
@@ -167,18 +174,9 @@ function rangeAdd(config, request) {
167
174
  }
168
175
  }
169
176
  } catch (err) {
170
- _didIteratorError = true;
171
- _iteratorError = err;
177
+ _iterator.e(err);
172
178
  } finally {
173
- try {
174
- if (!_iteratorNormalCompletion && _iterator["return"] != null) {
175
- _iterator["return"]();
176
- }
177
- } finally {
178
- if (_didIteratorError) {
179
- throw _iteratorError;
180
- }
181
- }
179
+ _iterator.f();
182
180
  }
183
181
  };
184
182
  }
@@ -209,12 +207,11 @@ function rangeDelete(config, request) {
209
207
  var deletedIDField = data[rootField];
210
208
 
211
209
  if (deletedIDField && Array.isArray(deletedIDFieldName)) {
212
- var _iteratorNormalCompletion2 = true;
213
- var _didIteratorError2 = false;
214
- var _iteratorError2 = undefined;
210
+ var _iterator2 = _createForOfIteratorHelper(deletedIDFieldName),
211
+ _step2;
215
212
 
216
213
  try {
217
- for (var _iterator2 = deletedIDFieldName[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
214
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
218
215
  var eachField = _step2.value;
219
216
 
220
217
  if (deletedIDField && typeof deletedIDField === 'object') {
@@ -222,18 +219,9 @@ function rangeDelete(config, request) {
222
219
  }
223
220
  }
224
221
  } catch (err) {
225
- _didIteratorError2 = true;
226
- _iteratorError2 = err;
222
+ _iterator2.e(err);
227
223
  } finally {
228
- try {
229
- if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
230
- _iterator2["return"]();
231
- }
232
- } finally {
233
- if (_didIteratorError2) {
234
- throw _iteratorError2;
235
- }
236
- }
224
+ _iterator2.f();
237
225
  }
238
226
 
239
227
  if (Array.isArray(deletedIDField)) {
@@ -290,38 +278,28 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
290
278
  return;
291
279
  }
292
280
 
293
- var _iteratorNormalCompletion3 = true;
294
- var _didIteratorError3 = false;
295
- var _iteratorError3 = undefined;
281
+ var _iterator3 = _createForOfIteratorHelper(connectionKeys),
282
+ _step3;
296
283
 
297
284
  try {
298
285
  var _loop = function _loop() {
299
286
  var key = _step3.value;
300
- var connection = RelayConnectionHandler.getConnection(recordProxy, key.key, key.filters);
287
+ var connection = ConnectionHandler.getConnection(recordProxy, key.key, key.filters);
301
288
 
302
289
  if (connection) {
303
290
  deleteIDs.forEach(function (deleteID) {
304
- RelayConnectionHandler.deleteNode(connection, deleteID);
291
+ ConnectionHandler.deleteNode(connection, deleteID);
305
292
  });
306
293
  }
307
294
  };
308
295
 
309
- for (var _iterator3 = connectionKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
296
+ for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
310
297
  _loop();
311
298
  }
312
299
  } catch (err) {
313
- _didIteratorError3 = true;
314
- _iteratorError3 = err;
300
+ _iterator3.e(err);
315
301
  } finally {
316
- try {
317
- if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
318
- _iterator3["return"]();
319
- }
320
- } finally {
321
- if (_didIteratorError3) {
322
- throw _iteratorError3;
323
- }
324
- }
302
+ _iterator3.f();
325
303
  }
326
304
  }
327
305
 
@@ -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");
@@ -23,9 +24,7 @@ var _require2 = require('../store/RelayStoreUtils'),
23
24
  * A helper class for manipulating a given record from a record source via an
24
25
  * imperative/OO-style API.
25
26
  */
26
- var RelayRecordProxy =
27
- /*#__PURE__*/
28
- function () {
27
+ var RelayRecordProxy = /*#__PURE__*/function () {
29
28
  function RelayRecordProxy(source, mutator, dataID) {
30
29
  this._dataID = dataID;
31
30
  this._mutator = mutator;
@@ -126,6 +125,10 @@ function () {
126
125
  return this;
127
126
  };
128
127
 
128
+ _proto.invalidateRecord = function invalidateRecord() {
129
+ this._source.markIDForInvalidation(this._dataID);
130
+ };
131
+
129
132
  return RelayRecordProxy;
130
133
  }();
131
134
 
@@ -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 RelayModernRecord = require('../store/RelayModernRecord');
@@ -28,13 +29,10 @@ var _require = require('../store/RelayRecordState'),
28
29
  * - Modifications cause a fresh version of a record to be created in `sink`.
29
30
  * These sink records contain only modified fields.
30
31
  */
31
- var RelayRecordSourceMutator =
32
- /*#__PURE__*/
33
- function () {
34
- function RelayRecordSourceMutator(base, sink, connectionEvents) {
32
+ var RelayRecordSourceMutator = /*#__PURE__*/function () {
33
+ function RelayRecordSourceMutator(base, sink) {
35
34
  this.__sources = [sink, base];
36
35
  this._base = base;
37
- this._connectionEvents = connectionEvents;
38
36
  this._sink = sink;
39
37
  }
40
38
  /**
@@ -222,10 +220,6 @@ function () {
222
220
  RelayModernRecord.setLinkedRecordIDs(sinkRecord, storageKey, linkedIDs);
223
221
  };
224
222
 
225
- _proto.appendConnectionEvent_UNSTABLE = function appendConnectionEvent_UNSTABLE(event) {
226
- this._connectionEvents.push(event);
227
- };
228
-
229
223
  return RelayRecordSourceMutator;
230
224
  }();
231
225
 
@@ -7,18 +7,15 @@
7
7
  *
8
8
  * @format
9
9
  */
10
+ // flowlint ambiguous-object-type:error
10
11
  'use strict';
11
12
 
12
13
  var RelayModernRecord = require('../store/RelayModernRecord');
13
14
 
14
15
  var RelayRecordProxy = require('./RelayRecordProxy');
15
16
 
16
- var RelayRecordSourceSelectorProxy = require('./RelayRecordSourceSelectorProxy');
17
-
18
17
  var invariant = require("fbjs/lib/invariant");
19
18
 
20
- var normalizeRelayPayload = require('../store/normalizeRelayPayload');
21
-
22
19
  var _require = require('../store/RelayRecordState'),
23
20
  EXISTENT = _require.EXISTENT,
24
21
  NONEXISTENT = _require.NONEXISTENT;
@@ -32,14 +29,14 @@ var _require2 = require('../store/RelayStoreUtils'),
32
29
  *
33
30
  * A helper for manipulating a `RecordSource` via an imperative/OO-style API.
34
31
  */
35
- var RelayRecordSourceProxy =
36
- /*#__PURE__*/
37
- function () {
32
+ var RelayRecordSourceProxy = /*#__PURE__*/function () {
38
33
  function RelayRecordSourceProxy(mutator, getDataID, handlerProvider) {
39
34
  this.__mutator = mutator;
40
35
  this._handlerProvider = handlerProvider || null;
41
36
  this._proxies = {};
42
37
  this._getDataID = getDataID;
38
+ this._invalidatedStore = false;
39
+ this._idsMarkedForInvalidation = new Set();
43
40
  }
44
41
 
45
42
  var _proto = RelayRecordSourceProxy.prototype;
@@ -76,22 +73,6 @@ function () {
76
73
  }
77
74
  };
78
75
 
79
- _proto.commitPayload = function commitPayload(operation, response) {
80
- if (!response) {
81
- return new RelayRecordSourceSelectorProxy(this.__mutator, this, operation.fragment);
82
- }
83
-
84
- var _normalizeRelayPayloa = normalizeRelayPayload(operation.root, response, null, {
85
- getDataID: this._getDataID,
86
- request: operation.request
87
- }),
88
- source = _normalizeRelayPayloa.source,
89
- fieldPayloads = _normalizeRelayPayloa.fieldPayloads;
90
-
91
- this.publishSource(source, fieldPayloads);
92
- return new RelayRecordSourceSelectorProxy(this.__mutator, this, operation.fragment);
93
- };
94
-
95
76
  _proto.create = function create(dataID, typeName) {
96
77
  this.__mutator.create(dataID, typeName);
97
78
 
@@ -130,10 +111,26 @@ function () {
130
111
  root = this.create(ROOT_ID, ROOT_TYPE);
131
112
  }
132
113
 
133
- !(root && root.getType() === ROOT_TYPE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#getRoot(): Expected the source to contain a ' + 'root record.') : invariant(false) : void 0;
114
+ !(root && root.getType() === ROOT_TYPE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceProxy#getRoot(): Expected the source to contain a ' + 'root record, %s.', root == null ? 'no root record found' : "found a root record of type `".concat(root.getType(), "`")) : invariant(false) : void 0;
134
115
  return root;
135
116
  };
136
117
 
118
+ _proto.invalidateStore = function invalidateStore() {
119
+ this._invalidatedStore = true;
120
+ };
121
+
122
+ _proto.isStoreMarkedForInvalidation = function isStoreMarkedForInvalidation() {
123
+ return this._invalidatedStore;
124
+ };
125
+
126
+ _proto.markIDForInvalidation = function markIDForInvalidation(dataID) {
127
+ this._idsMarkedForInvalidation.add(dataID);
128
+ };
129
+
130
+ _proto.getIDsMarkedForInvalidation = function getIDsMarkedForInvalidation() {
131
+ return this._idsMarkedForInvalidation;
132
+ };
133
+
137
134
  return RelayRecordSourceProxy;
138
135
  }();
139
136
 
@@ -7,12 +7,14 @@
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
15
  var _require = require('../store/RelayStoreUtils'),
15
- getStorageKey = _require.getStorageKey;
16
+ getStorageKey = _require.getStorageKey,
17
+ ROOT_TYPE = _require.ROOT_TYPE;
16
18
 
17
19
  /**
18
20
  * @internal
@@ -22,9 +24,7 @@ var _require = require('../store/RelayStoreUtils'),
22
24
  * complex arguments and it can be tedious to re-construct the correct sets of
23
25
  * arguments to pass to e.g. `getRoot().getLinkedRecord()`.
24
26
  */
25
- var RelayRecordSourceSelectorProxy =
26
- /*#__PURE__*/
27
- function () {
27
+ var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
28
28
  function RelayRecordSourceSelectorProxy(mutator, recordSource, readSelector) {
29
29
  this.__mutator = mutator;
30
30
  this.__recordSource = recordSource;
@@ -49,6 +49,16 @@ function () {
49
49
  return this.__recordSource.getRoot();
50
50
  };
51
51
 
52
+ _proto.getOperationRoot = function getOperationRoot() {
53
+ var root = this.__recordSource.get(this._readSelector.dataID);
54
+
55
+ if (!root) {
56
+ root = this.__recordSource.create(this._readSelector.dataID, ROOT_TYPE);
57
+ }
58
+
59
+ return root;
60
+ };
61
+
52
62
  _proto._getRootField = function _getRootField(selector, fieldName, plural) {
53
63
  var field = selector.node.selections.find(function (selection) {
54
64
  return selection.kind === 'LinkedField' && selection.name === fieldName;
@@ -62,24 +72,18 @@ function () {
62
72
  var field = this._getRootField(this._readSelector, fieldName, false);
63
73
 
64
74
  var storageKey = getStorageKey(field, this._readSelector.variables);
65
- return this.getRoot().getLinkedRecord(storageKey);
75
+ return this.getOperationRoot().getLinkedRecord(storageKey);
66
76
  };
67
77
 
68
78
  _proto.getPluralRootField = function getPluralRootField(fieldName) {
69
79
  var field = this._getRootField(this._readSelector, fieldName, true);
70
80
 
71
81
  var storageKey = getStorageKey(field, this._readSelector.variables);
72
- return this.getRoot().getLinkedRecords(storageKey);
82
+ return this.getOperationRoot().getLinkedRecords(storageKey);
73
83
  };
74
84
 
75
- _proto.insertConnectionEdge_UNSTABLE = function insertConnectionEdge_UNSTABLE(connectionID, args, edge) {
76
- this.__mutator.appendConnectionEvent_UNSTABLE({
77
- kind: 'insert',
78
- args: args,
79
- connectionID: connectionID,
80
- edgeID: edge.getDataID(),
81
- request: this._readSelector.owner
82
- });
85
+ _proto.invalidateStore = function invalidateStore() {
86
+ this.__recordSource.invalidateStore();
83
87
  };
84
88
 
85
89
  return RelayRecordSourceSelectorProxy;
@@ -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 RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
@@ -15,7 +16,7 @@ var invariant = require("fbjs/lib/invariant");
15
16
 
16
17
  var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
17
18
 
18
- var _require = require('../query/RelayModernGraphQLTag'),
19
+ var _require = require('../query/GraphQLTag'),
19
20
  getRequest = _require.getRequest;
20
21
 
21
22
  var _require2 = require('../store/RelayModernOperationDescriptor'),
@@ -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
  function commitLocalUpdate(environment, updater) {
@@ -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");
@@ -15,6 +16,8 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
15
16
 
16
17
  var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
17
18
 
19
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
20
+
18
21
  var invariant = require("fbjs/lib/invariant");
19
22
 
20
23
  var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
@@ -23,11 +26,14 @@ var validateMutation = require('./validateMutation');
23
26
 
24
27
  var warning = require("fbjs/lib/warning");
25
28
 
26
- var _require = require('../query/RelayModernGraphQLTag'),
29
+ var _require = require('../query/GraphQLTag'),
27
30
  getRequest = _require.getRequest;
28
31
 
29
- var _require2 = require('../store/RelayModernOperationDescriptor'),
30
- createOperationDescriptor = _require2.createOperationDescriptor;
32
+ var _require2 = require('../store/ClientID'),
33
+ generateUniqueClientID = _require2.generateUniqueClientID;
34
+
35
+ var _require3 = require('../store/RelayModernOperationDescriptor'),
36
+ createOperationDescriptor = _require3.createOperationDescriptor;
31
37
 
32
38
  /**
33
39
  * Higher-level helper function to execute a mutation against a specific
@@ -49,10 +55,12 @@ function commitMutation(environment, config) {
49
55
  optimisticUpdater = config.optimisticUpdater,
50
56
  updater = config.updater;
51
57
  var configs = config.configs,
58
+ cacheConfig = config.cacheConfig,
52
59
  onError = config.onError,
60
+ onUnsubscribe = config.onUnsubscribe,
53
61
  variables = config.variables,
54
62
  uploadables = config.uploadables;
55
- var operation = createOperationDescriptor(mutation, variables); // TODO: remove this check after we fix flow.
63
+ var operation = createOperationDescriptor(mutation, variables, RelayFeatureFlags.ENABLE_UNIQUE_MUTATION_ROOT ? generateUniqueClientID() : undefined); // TODO: remove this check after we fix flow.
56
64
 
57
65
  if (typeof optimisticResponse === 'function') {
58
66
  optimisticResponse = optimisticResponse();
@@ -61,7 +69,7 @@ function commitMutation(environment, config) {
61
69
 
62
70
  if (process.env.NODE_ENV !== "production") {
63
71
  if (optimisticResponse instanceof Object) {
64
- validateMutation(optimisticResponse, mutation, config.variables);
72
+ validateMutation(optimisticResponse, mutation, variables);
65
73
  }
66
74
  }
67
75
 
@@ -74,6 +82,7 @@ function commitMutation(environment, config) {
74
82
 
75
83
  var errors = [];
76
84
  var subscription = environment.executeMutation({
85
+ cacheConfig: cacheConfig,
77
86
  operation: operation,
78
87
  optimisticResponse: optimisticResponse,
79
88
  optimisticUpdater: optimisticUpdater,
@@ -81,8 +90,16 @@ function commitMutation(environment, config) {
81
90
  uploadables: uploadables
82
91
  }).subscribe({
83
92
  next: function next(payload) {
84
- if (payload.errors) {
85
- errors.push.apply(errors, (0, _toConsumableArray2["default"])(payload.errors));
93
+ if (Array.isArray(payload)) {
94
+ payload.forEach(function (item) {
95
+ if (item.errors) {
96
+ errors.push.apply(errors, (0, _toConsumableArray2["default"])(item.errors));
97
+ }
98
+ });
99
+ } else {
100
+ if (payload.errors) {
101
+ errors.push.apply(errors, (0, _toConsumableArray2["default"])(payload.errors));
102
+ }
86
103
  }
87
104
  },
88
105
  complete: function complete() {
@@ -93,7 +110,8 @@ function commitMutation(environment, config) {
93
110
  onCompleted(snapshot.data, errors.length !== 0 ? errors : null);
94
111
  }
95
112
  },
96
- error: onError
113
+ error: onError,
114
+ unsubscribe: onUnsubscribe
97
115
  });
98
116
  return {
99
117
  dispose: subscription.unsubscribe