react-relay 2.0.0-rc.2 → 5.0.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 (166) hide show
  1. package/index.js +2 -2
  2. package/lib/ReactRelayContext.js +6 -3
  3. package/lib/ReactRelayFragmentContainer.js +48 -46
  4. package/lib/ReactRelayFragmentMockRenderer.js +5 -1
  5. package/lib/ReactRelayPaginationContainer.js +102 -68
  6. package/lib/ReactRelayQueryFetcher.js +54 -28
  7. package/lib/ReactRelayQueryRenderer.js +28 -20
  8. package/lib/ReactRelayRefetchContainer.js +70 -58
  9. package/lib/ReactRelayTestMocker.js +56 -43
  10. package/lib/ReactRelayTypes.js +1 -1
  11. package/lib/RelayContext.js +8 -2
  12. package/lib/assertFragmentMap.js +9 -7
  13. package/lib/buildReactRelayContainer.js +32 -23
  14. package/lib/index.js +41 -0
  15. package/lib/isRelayEnvironment.js +1 -1
  16. package/lib/isRelayVariables.js +1 -1
  17. package/lib/readContext.js +7 -4
  18. package/package.json +4 -4
  19. package/react-relay.js +2 -2
  20. package/react-relay.min.js +2 -2
  21. package/classic.js +0 -10
  22. package/compat.js +0 -10
  23. package/lib/ConcreteQuery.js +0 -10
  24. package/lib/GraphQLQueryRunner.js +0 -264
  25. package/lib/GraphQLRange.js +0 -1124
  26. package/lib/GraphQLSegment.js +0 -743
  27. package/lib/GraphQLStoreChangeEmitter.js +0 -141
  28. package/lib/GraphQLStoreQueryResolver.js +0 -288
  29. package/lib/GraphQLStoreRangeUtils.js +0 -126
  30. package/lib/QueryBuilder.js +0 -228
  31. package/lib/ReactRelayClassicExports.js +0 -29
  32. package/lib/ReactRelayCompatContainerBuilder.js +0 -175
  33. package/lib/ReactRelayCompatPublic.js +0 -28
  34. package/lib/ReactRelayContainerProfiler.js +0 -30
  35. package/lib/ReactRelayFragmentContainer-flowtest.js +0 -201
  36. package/lib/ReactRelayPaginationContainer-flowtest.js +0 -213
  37. package/lib/ReactRelayPublic.js +0 -29
  38. package/lib/ReactRelayRefetchContainer-flowtest.js +0 -191
  39. package/lib/RelayCacheProcessor.js +0 -196
  40. package/lib/RelayChangeTracker.js +0 -83
  41. package/lib/RelayClassicContainerUtils.js +0 -49
  42. package/lib/RelayClassicCore.js +0 -34
  43. package/lib/RelayClassicRecordState.js +0 -31
  44. package/lib/RelayCompatContainer.js +0 -25
  45. package/lib/RelayCompatEnvironment.js +0 -27
  46. package/lib/RelayCompatMutations.js +0 -133
  47. package/lib/RelayCompatPaginationContainer.js +0 -27
  48. package/lib/RelayCompatRefetchContainer.js +0 -27
  49. package/lib/RelayCompatTypes.js +0 -10
  50. package/lib/RelayContainer.js +0 -889
  51. package/lib/RelayContainerComparators.js +0 -75
  52. package/lib/RelayContainerProxy.js +0 -21
  53. package/lib/RelayDefaultNetworkLayer.js +0 -192
  54. package/lib/RelayEnvironment.js +0 -449
  55. package/lib/RelayEnvironmentTypes.js +0 -10
  56. package/lib/RelayFetchMode.js +0 -17
  57. package/lib/RelayFragmentPointer.js +0 -161
  58. package/lib/RelayFragmentReference.js +0 -249
  59. package/lib/RelayFragmentSpecResolver.js +0 -305
  60. package/lib/RelayGraphQLMutation.js +0 -288
  61. package/lib/RelayGraphQLTag.js +0 -42
  62. package/lib/RelayInternalTypes.js +0 -15
  63. package/lib/RelayInternals.js +0 -24
  64. package/lib/RelayMetaRoute.js +0 -35
  65. package/lib/RelayMockRenderer.js +0 -71
  66. package/lib/RelayModern-flowtest.js +0 -342
  67. package/lib/RelayModernFlowtest_badref.graphql.js +0 -10
  68. package/lib/RelayModernFlowtest_notref.graphql.js +0 -10
  69. package/lib/RelayModernFlowtest_user.graphql.js +0 -10
  70. package/lib/RelayModernFlowtest_users.graphql.js +0 -10
  71. package/lib/RelayMutation.js +0 -322
  72. package/lib/RelayMutationDebugPrinter.js +0 -47
  73. package/lib/RelayMutationQuery.js +0 -558
  74. package/lib/RelayMutationQueue.js +0 -530
  75. package/lib/RelayMutationRequest.js +0 -103
  76. package/lib/RelayMutationTracker.js +0 -113
  77. package/lib/RelayMutationTransaction.js +0 -92
  78. package/lib/RelayMutationTransactionStatus.js +0 -55
  79. package/lib/RelayNetworkDebug.js +0 -131
  80. package/lib/RelayNetworkLayer.js +0 -185
  81. package/lib/RelayNodeInterface.js +0 -104
  82. package/lib/RelayOperationDescriptor.js +0 -40
  83. package/lib/RelayOptimisticMutationUtils.js +0 -208
  84. package/lib/RelayPendingQueryTracker.js +0 -166
  85. package/lib/RelayPropTypes.js +0 -57
  86. package/lib/RelayPublic.js +0 -44
  87. package/lib/RelayQL.js +0 -128
  88. package/lib/RelayQuery.js +0 -1584
  89. package/lib/RelayQueryCaching.js +0 -33
  90. package/lib/RelayQueryConfig.js +0 -58
  91. package/lib/RelayQueryPath.js +0 -204
  92. package/lib/RelayQueryRequest.js +0 -103
  93. package/lib/RelayQueryTracker.js +0 -86
  94. package/lib/RelayQueryTransform.js +0 -91
  95. package/lib/RelayQueryVisitor.js +0 -93
  96. package/lib/RelayQueryWriter.js +0 -573
  97. package/lib/RelayReadyState.js +0 -83
  98. package/lib/RelayReadyStateRenderer.js +0 -145
  99. package/lib/RelayRecord.js +0 -75
  100. package/lib/RelayRecordStatusMap.js +0 -57
  101. package/lib/RelayRecordStore.js +0 -433
  102. package/lib/RelayRecordWriter.js +0 -601
  103. package/lib/RelayRefQueryDescriptor.js +0 -27
  104. package/lib/RelayRenderer.js +0 -268
  105. package/lib/RelayRootContainer.js +0 -125
  106. package/lib/RelayRoute.js +0 -92
  107. package/lib/RelayRouteFragment.js +0 -44
  108. package/lib/RelaySelector.js +0 -201
  109. package/lib/RelayShallowMock.js +0 -69
  110. package/lib/RelayStaticContainer.js +0 -38
  111. package/lib/RelayStore.js +0 -12
  112. package/lib/RelayStoreConstants.js +0 -20
  113. package/lib/RelayStoreData.js +0 -660
  114. package/lib/RelayTaskQueue.js +0 -189
  115. package/lib/RelayTypes.js +0 -13
  116. package/lib/RelayVariable.js +0 -32
  117. package/lib/RelayVariables.js +0 -92
  118. package/lib/buildRQL.js +0 -160
  119. package/lib/callsFromGraphQL.js +0 -74
  120. package/lib/callsToGraphQL.js +0 -34
  121. package/lib/checkRelayQueryData.js +0 -250
  122. package/lib/createRelayQuery.js +0 -17
  123. package/lib/dedent.js +0 -49
  124. package/lib/diffRelayQuery.js +0 -757
  125. package/lib/directivesToGraphQL.js +0 -39
  126. package/lib/filterRelayQuery.js +0 -29
  127. package/lib/findRelayQueryLeaves.js +0 -293
  128. package/lib/flattenRelayQuery.js +0 -121
  129. package/lib/flattenSplitRelayQueries.js +0 -44
  130. package/lib/forEachRootCallArg.js +0 -40
  131. package/lib/fromGraphQL.js +0 -48
  132. package/lib/generateClientEdgeID.js +0 -22
  133. package/lib/generateClientID.js +0 -27
  134. package/lib/generateConcreteFragmentID.js +0 -30
  135. package/lib/generateForceIndex.js +0 -24
  136. package/lib/generateRQLFieldAlias.js +0 -39
  137. package/lib/getRangeBehavior.js +0 -58
  138. package/lib/getRelayQueries.js +0 -83
  139. package/lib/intersectRelayQuery.js +0 -149
  140. package/lib/isClassicRelayContext.js +0 -20
  141. package/lib/isClassicRelayEnvironment.js +0 -20
  142. package/lib/isCompatibleRelayFragmentType.js +0 -27
  143. package/lib/isRelayContainer.js +0 -16
  144. package/lib/makeLegacyStringishComponentRef.js +0 -52
  145. package/lib/printRelayOSSQuery.js +0 -329
  146. package/lib/printRelayQuery.js +0 -26
  147. package/lib/rangeOperationToMetadataKey.js +0 -25
  148. package/lib/readRelayQueryData.js +0 -551
  149. package/lib/relayUnstableBatchedUpdates.js +0 -12
  150. package/lib/relayUnstableBatchedUpdates.native.js +0 -11
  151. package/lib/restoreRelayCacheData.js +0 -188
  152. package/lib/serializeRelayQueryCall.js +0 -42
  153. package/lib/splitDeferredRelayQueries.js +0 -298
  154. package/lib/stableStringify.js +0 -85
  155. package/lib/testEditDistance.js +0 -112
  156. package/lib/throwFailedPromise.js +0 -26
  157. package/lib/toGraphQL.js +0 -94
  158. package/lib/transformRelayQueryPayload.js +0 -145
  159. package/lib/validateMutationConfig.js +0 -117
  160. package/lib/validateRelayReadQuery.js +0 -112
  161. package/lib/writeRelayQueryPayload.js +0 -44
  162. package/lib/writeRelayUpdatePayload.js +0 -513
  163. package/react-relay-classic.js +0 -4
  164. package/react-relay-classic.min.js +0 -9
  165. package/react-relay-compat.js +0 -4
  166. package/react-relay-compat.min.js +0 -9
@@ -1,660 +0,0 @@
1
- /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
3
- *
4
- * This source code is licensed under the MIT license found in the
5
- * LICENSE file in the root directory of this source tree.
6
- *
7
- *
8
- * @format
9
- */
10
- 'use strict';
11
-
12
- var _objectSpread2 = require("@babel/runtime/helpers/interopRequireDefault")(require("@babel/runtime/helpers/objectSpread"));
13
-
14
- var idField = require("./RelayQuery").Field.build({
15
- fieldName: require("./RelayNodeInterface").ID,
16
- type: 'String'
17
- });
18
-
19
- var typeField = require("./RelayQuery").Field.build({
20
- fieldName: require("./RelayNodeInterface").TYPENAME,
21
- type: 'String'
22
- });
23
- /**
24
- * @internal
25
- *
26
- * Wraps the data caches and associated metadata tracking objects used by
27
- * GraphQLStore/RelayStore.
28
- */
29
-
30
-
31
- var RelayStoreData =
32
- /*#__PURE__*/
33
- function () {
34
- function RelayStoreData() {
35
- var cachedRecords = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
36
- var cachedRootCallMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
37
- var queuedRecords = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
38
- var records = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
39
- var rootCallMap = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
40
- var nodeRangeMap = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {};
41
- var rangeData = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : new (require("./GraphQLStoreRangeUtils"))();
42
- this._cacheManager = null;
43
- this._cachedRecords = cachedRecords;
44
- this._cachedRootCallMap = cachedRootCallMap;
45
- this._cachedStore = new (require("./RelayRecordStore"))({
46
- cachedRecords: cachedRecords,
47
- records: records
48
- }, {
49
- cachedRootCallMap: cachedRootCallMap,
50
- rootCallMap: rootCallMap
51
- }, nodeRangeMap);
52
- this._changeEmitter = new (require("./GraphQLStoreChangeEmitter"))(rangeData);
53
- this._mutationQueue = new (require("./RelayMutationQueue"))(this);
54
- this._networkLayer = new (require("./RelayNetworkLayer"))();
55
- this._nodeRangeMap = nodeRangeMap;
56
- this._pendingQueryTracker = new (require("./RelayPendingQueryTracker"))(this);
57
- this._queryRunner = new (require("./GraphQLQueryRunner"))(this);
58
- this._queryTracker = new (require("./RelayQueryTracker"))();
59
- this._queuedRecords = queuedRecords;
60
- this._queuedStore = new (require("./RelayRecordStore"))({
61
- cachedRecords: cachedRecords,
62
- queuedRecords: queuedRecords,
63
- records: records
64
- }, {
65
- cachedRootCallMap: cachedRootCallMap,
66
- rootCallMap: rootCallMap
67
- }, nodeRangeMap);
68
- this._records = records;
69
- this._recordStore = new (require("./RelayRecordStore"))({
70
- records: records
71
- }, {
72
- rootCallMap: rootCallMap
73
- }, nodeRangeMap);
74
- this._rangeData = rangeData;
75
- this._rootCallMap = rootCallMap;
76
- this._taskQueue = new (require("./RelayTaskQueue"))();
77
- }
78
- /**
79
- * @internal
80
- *
81
- * Sets/clears the query tracker.
82
- *
83
- * @warning Do not use this unless your application uses only
84
- * `RelayGraphQLMutation` for mutations.
85
- */
86
-
87
-
88
- var _proto = RelayStoreData.prototype;
89
-
90
- _proto.injectQueryTracker = function injectQueryTracker(queryTracker) {
91
- this._queryTracker = queryTracker;
92
- };
93
- /**
94
- * Sets/clears the scheduling function used by the internal task queue to
95
- * schedule units of work for execution.
96
- */
97
-
98
-
99
- _proto.injectTaskScheduler = function injectTaskScheduler(scheduler) {
100
- this._taskQueue.injectScheduler(scheduler);
101
- };
102
- /**
103
- * Sets/clears the cache manager that is used to cache changes written to
104
- * the store.
105
- */
106
-
107
-
108
- _proto.injectCacheManager = function injectCacheManager(cacheManager) {
109
- this._cacheManager = cacheManager;
110
- };
111
-
112
- _proto.clearCacheManager = function clearCacheManager() {
113
- this._cacheManager = null;
114
- };
115
-
116
- _proto.hasCacheManager = function hasCacheManager() {
117
- return !!this._cacheManager;
118
- };
119
-
120
- _proto.getCacheManager = function getCacheManager() {
121
- return this._cacheManager;
122
- };
123
- /**
124
- * Returns whether a given record is affected by an optimistic update.
125
- */
126
-
127
-
128
- _proto.hasOptimisticUpdate = function hasOptimisticUpdate(dataID) {
129
- dataID = this.getRangeData().getCanonicalClientID(dataID);
130
- return this.getQueuedStore().hasOptimisticUpdate(dataID);
131
- };
132
- /**
133
- * Returns a list of client mutation IDs for queued mutations whose optimistic
134
- * updates are affecting the record corresponding the given dataID. Returns
135
- * null if the record isn't affected by any optimistic updates.
136
- */
137
-
138
-
139
- _proto.getClientMutationIDs = function getClientMutationIDs(dataID) {
140
- dataID = this.getRangeData().getCanonicalClientID(dataID);
141
- return this.getQueuedStore().getClientMutationIDs(dataID);
142
- };
143
- /**
144
- * Restores data for queries incrementally from cache.
145
- * It calls onSuccess when all the data has been loaded into memory.
146
- * It calls onFailure when some data is unabled to be satisfied from cache.
147
- */
148
-
149
-
150
- _proto.restoreQueriesFromCache = function restoreQueriesFromCache(queries, callbacks) {
151
- var _this = this;
152
-
153
- var cacheManager = this._cacheManager;
154
- !cacheManager ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayStoreData: `restoreQueriesFromCache` should only be called ' + 'when cache manager is available.') : require("fbjs/lib/invariant")(false) : void 0;
155
- var changeTracker = new (require("./RelayChangeTracker"))();
156
-
157
- var profile = require("relay-runtime").RelayProfiler.profile('RelayStoreData.readFromDiskCache');
158
-
159
- return require("./restoreRelayCacheData").restoreQueriesDataFromCache(queries, this._queuedStore, this._cachedRecords, this._cachedRootCallMap, cacheManager, changeTracker, {
160
- onSuccess: function onSuccess() {
161
- _this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
162
-
163
- profile.stop();
164
- callbacks.onSuccess && callbacks.onSuccess();
165
- },
166
- onFailure: function onFailure() {
167
- _this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
168
-
169
- profile.stop();
170
- callbacks.onFailure && callbacks.onFailure();
171
- }
172
- });
173
- };
174
- /**
175
- * Restores data for a fragment incrementally from cache.
176
- * It calls onSuccess when all the data has been loaded into memory.
177
- * It calls onFailure when some data is unabled to be satisfied from cache.
178
- */
179
-
180
-
181
- _proto.restoreFragmentFromCache = function restoreFragmentFromCache(dataID, fragment, path, callbacks) {
182
- var _this2 = this;
183
-
184
- var cacheManager = this._cacheManager;
185
- !cacheManager ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayStoreData: `restoreFragmentFromCache` should only be called when ' + 'cache manager is available.') : require("fbjs/lib/invariant")(false) : void 0;
186
- var changeTracker = new (require("./RelayChangeTracker"))();
187
-
188
- var profile = require("relay-runtime").RelayProfiler.profile('RelayStoreData.readFragmentFromDiskCache');
189
-
190
- return require("./restoreRelayCacheData").restoreFragmentDataFromCache(dataID, fragment, path, this._queuedStore, this._cachedRecords, this._cachedRootCallMap, cacheManager, changeTracker, {
191
- onSuccess: function onSuccess() {
192
- _this2._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
193
-
194
- profile.stop();
195
- callbacks.onSuccess && callbacks.onSuccess();
196
- },
197
- onFailure: function onFailure() {
198
- _this2._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
199
-
200
- profile.stop();
201
- callbacks.onFailure && callbacks.onFailure();
202
- }
203
- });
204
- };
205
- /**
206
- * Write the results of an OSS query, which can have multiple root fields,
207
- * updating both the root call map (for consistency with classic queries)
208
- * and the root record (for consistency with modern queries/fragments).
209
- */
210
-
211
-
212
- _proto.handleOSSQueryPayload = function handleOSSQueryPayload(query, payload, forceIndex) {
213
- var _this3 = this;
214
-
215
- var profiler = require("relay-runtime").RelayProfiler.profile('RelayStoreData.handleQueryPayload');
216
-
217
- var changeTracker = new (require("./RelayChangeTracker"))();
218
- var recordWriter = this.getRecordWriter();
219
- var writer = new (require("./RelayQueryWriter"))(this._queuedStore, recordWriter, this._queryTracker, changeTracker, {
220
- forceIndex: forceIndex,
221
- updateTrackedQueries: true
222
- });
223
- getRootsWithPayloads(query, payload).forEach(function (_ref) {
224
- var field = _ref.field,
225
- root = _ref.root,
226
- rootPayload = _ref.rootPayload;
227
-
228
- // Write the results of the field-specific query
229
- require("./writeRelayQueryPayload")(writer, root, rootPayload); // Ensure the root record exists
230
-
231
-
232
- var path = require("./RelayQueryPath").getRootRecordPath();
233
-
234
- recordWriter.putRecord(require("./RelayStoreConstants").ROOT_ID, query.getType(), path);
235
-
236
- if (_this3._queuedStore.getRecordState(require("./RelayStoreConstants").ROOT_ID) !== require("./RelayClassicRecordState").EXISTENT) {
237
- changeTracker.createID(require("./RelayStoreConstants").ROOT_ID);
238
- } else {
239
- changeTracker.updateID(require("./RelayStoreConstants").ROOT_ID);
240
- } // Collect linked record ids for this root field
241
-
242
-
243
- var dataIDs = [];
244
-
245
- require("./RelayNodeInterface").getResultsFromPayload(root, rootPayload).forEach(function (_ref2) {
246
- var result = _ref2.result,
247
- rootCallInfo = _ref2.rootCallInfo;
248
- var storageKey = rootCallInfo.storageKey,
249
- identifyingArgKey = rootCallInfo.identifyingArgKey;
250
- var dataID = recordWriter.getDataID(storageKey, identifyingArgKey);
251
-
252
- if (dataID != null) {
253
- dataIDs.push(dataID);
254
- }
255
- }); // Write the field to the root record
256
-
257
-
258
- var storageKey = field.getStorageKey();
259
-
260
- if (field.isPlural()) {
261
- recordWriter.putLinkedRecordIDs(require("./RelayStoreConstants").ROOT_ID, storageKey, dataIDs);
262
- } else {
263
- var dataID = dataIDs[0];
264
-
265
- if (dataID != null) {
266
- recordWriter.putLinkedRecordID(require("./RelayStoreConstants").ROOT_ID, storageKey, dataID);
267
- } else {
268
- recordWriter.putField(require("./RelayStoreConstants").ROOT_ID, storageKey, null);
269
- }
270
- }
271
- });
272
-
273
- this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
274
-
275
- profiler.stop();
276
- };
277
- /**
278
- * Write the results of a query into the base record store.
279
- */
280
-
281
-
282
- _proto.handleQueryPayload = function handleQueryPayload(query, payload, forceIndex) {
283
- var profiler = require("relay-runtime").RelayProfiler.profile('RelayStoreData.handleQueryPayload');
284
-
285
- var changeTracker = new (require("./RelayChangeTracker"))();
286
- var writer = new (require("./RelayQueryWriter"))(this._queuedStore, this.getRecordWriter(), this._queryTracker, changeTracker, {
287
- forceIndex: forceIndex,
288
- updateTrackedQueries: true
289
- });
290
-
291
- require("./writeRelayQueryPayload")(writer, query, payload);
292
-
293
- this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
294
-
295
- profiler.stop();
296
- };
297
- /**
298
- * Write the result of a fragment into the base record store.
299
- */
300
-
301
-
302
- _proto.handleFragmentPayload = function handleFragmentPayload(dataID, fragment, path, payload, forceIndex) {
303
- var profiler = require("relay-runtime").RelayProfiler.profile('RelayStoreData.handleFragmentPayload');
304
-
305
- var changeTracker = new (require("./RelayChangeTracker"))();
306
- var writer = new (require("./RelayQueryWriter"))(this._queuedStore, this.getRecordWriter(), this._queryTracker, changeTracker, {
307
- forceIndex: forceIndex,
308
- updateTrackedQueries: true
309
- });
310
- writer.createRecordIfMissing(fragment, dataID, path, payload);
311
- writer.writePayload(fragment, dataID, payload, path);
312
-
313
- this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
314
-
315
- profiler.stop();
316
- };
317
- /**
318
- * Write the results of an update into the base record store.
319
- */
320
-
321
-
322
- _proto.handleUpdatePayload = function handleUpdatePayload(operation, payload, _ref3) {
323
- var configs = _ref3.configs,
324
- isOptimisticUpdate = _ref3.isOptimisticUpdate;
325
-
326
- var profiler = require("relay-runtime").RelayProfiler.profile('RelayStoreData.handleUpdatePayload');
327
-
328
- var changeTracker = new (require("./RelayChangeTracker"))();
329
- var recordWriter;
330
-
331
- if (isOptimisticUpdate) {
332
- var _ConnectionInterface$ = require("relay-runtime").ConnectionInterface.get(),
333
- CLIENT_MUTATION_ID = _ConnectionInterface$.CLIENT_MUTATION_ID;
334
-
335
- var clientMutationID = payload[CLIENT_MUTATION_ID];
336
- !(typeof clientMutationID === 'string') ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayStoreData.handleUpdatePayload(): Expected optimistic payload ' + 'to have a valid `%s`.', CLIENT_MUTATION_ID) : require("fbjs/lib/invariant")(false) : void 0;
337
- recordWriter = this.getRecordWriterForOptimisticMutation(clientMutationID);
338
- } else {
339
- recordWriter = this._getRecordWriterForMutation();
340
- }
341
-
342
- var writer = new (require("./RelayQueryWriter"))(this._queuedStore, recordWriter, this._queryTracker, changeTracker, {
343
- forceIndex: require("./generateForceIndex")(),
344
- isOptimisticUpdate: isOptimisticUpdate,
345
- updateTrackedQueries: false
346
- });
347
-
348
- require("./writeRelayUpdatePayload")(writer, operation, payload, {
349
- configs: configs,
350
- isOptimisticUpdate: isOptimisticUpdate
351
- });
352
-
353
- this._handleChangedAndNewDataIDs(changeTracker.getChangeSet());
354
-
355
- profiler.stop();
356
- };
357
- /**
358
- * Given a query fragment and a data ID, returns a root query that applies
359
- * the fragment to the object specified by the data ID.
360
- */
361
-
362
-
363
- _proto.buildFragmentQueryForDataID = function buildFragmentQueryForDataID(fragment, dataID) {
364
- if (require("./RelayRecord").isClientID(dataID)) {
365
- var path = this._queuedStore.getPathToRecord(this._rangeData.getCanonicalClientID(dataID));
366
-
367
- !path ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayStoreData.buildFragmentQueryForDataID(): Cannot refetch ' + 'record `%s` without a path.', dataID) : require("fbjs/lib/invariant")(false) : void 0;
368
- return require("./RelayQueryPath").getQuery(this._cachedStore, path, fragment);
369
- } // Fragment fields cannot be spread directly into the root because they
370
- // may not exist on the `Node` type.
371
-
372
-
373
- return require("./RelayQuery").Root.build(fragment.getDebugName() || 'UnknownQuery', require("./RelayNodeInterface").NODE, dataID, [idField, typeField, fragment], {
374
- identifyingArgName: require("./RelayNodeInterface").ID,
375
- identifyingArgType: require("./RelayNodeInterface").ID_TYPE,
376
- isAbstract: true,
377
- isDeferred: false,
378
- isPlural: false
379
- }, require("./RelayNodeInterface").NODE_TYPE);
380
- };
381
-
382
- _proto.getNodeData = function getNodeData() {
383
- return this._records;
384
- };
385
-
386
- _proto.getQueuedData = function getQueuedData() {
387
- return this._queuedRecords;
388
- };
389
-
390
- _proto.clearQueuedData = function clearQueuedData() {
391
- var _this4 = this;
392
-
393
- require("fbjs/lib/forEachObject")(this._queuedRecords, function (_, key) {
394
- delete _this4._queuedRecords[key];
395
-
396
- _this4._changeEmitter.broadcastChangeForID(key);
397
- });
398
- };
399
-
400
- _proto.getCachedData = function getCachedData() {
401
- return this._cachedRecords;
402
- };
403
-
404
- _proto.getMutationQueue = function getMutationQueue() {
405
- return this._mutationQueue;
406
- };
407
-
408
- _proto.getNetworkLayer = function getNetworkLayer() {
409
- return this._networkLayer;
410
- };
411
- /**
412
- * Get the record store with only the cached and base data (no queued data).
413
- */
414
-
415
-
416
- _proto.getCachedStore = function getCachedStore() {
417
- return this._cachedStore;
418
- };
419
- /**
420
- * Get the record store with full data (cached, base, queued).
421
- */
422
-
423
-
424
- _proto.getQueuedStore = function getQueuedStore() {
425
- return this._queuedStore;
426
- };
427
- /**
428
- * Get the record store with only the base data (no queued/cached data).
429
- */
430
-
431
-
432
- _proto.getRecordStore = function getRecordStore() {
433
- return this._recordStore;
434
- };
435
- /**
436
- * Get the record writer for the base data.
437
- */
438
-
439
-
440
- _proto.getRecordWriter = function getRecordWriter() {
441
- return new (require("./RelayRecordWriter"))(this._records, this._rootCallMap, false, // isOptimistic
442
- this._nodeRangeMap, this._cacheManager ? this._cacheManager.getQueryWriter() : null);
443
- };
444
-
445
- _proto.getQueryTracker = function getQueryTracker() {
446
- return this._queryTracker;
447
- };
448
-
449
- _proto.getQueryRunner = function getQueryRunner() {
450
- return this._queryRunner;
451
- };
452
-
453
- _proto.getChangeEmitter = function getChangeEmitter() {
454
- return this._changeEmitter;
455
- };
456
-
457
- _proto.getRangeData = function getRangeData() {
458
- return this._rangeData;
459
- };
460
-
461
- _proto.getPendingQueryTracker = function getPendingQueryTracker() {
462
- return this._pendingQueryTracker;
463
- };
464
-
465
- _proto.getTaskQueue = function getTaskQueue() {
466
- return this._taskQueue;
467
- };
468
- /**
469
- * @deprecated
470
- *
471
- * Used temporarily by GraphQLStore, but all updates to this object are now
472
- * handled through a `RelayRecordStore` instance.
473
- */
474
-
475
-
476
- _proto.getRootCallData = function getRootCallData() {
477
- return this._rootCallMap;
478
- };
479
-
480
- _proto._isStoreDataEmpty = function _isStoreDataEmpty() {
481
- return Object.keys(this._records).length === 0 && Object.keys(this._queuedRecords).length === 0 && Object.keys(this._cachedRecords).length === 0;
482
- };
483
- /**
484
- * Given a ChangeSet, broadcasts changes for updated DataIDs
485
- * and registers new DataIDs with the garbage collector.
486
- */
487
-
488
-
489
- _proto._handleChangedAndNewDataIDs = function _handleChangedAndNewDataIDs(changeSet) {
490
- var _this5 = this;
491
-
492
- var updatedDataIDs = Object.keys(changeSet.updated);
493
- var createdDataIDs = Object.keys(changeSet.created);
494
- updatedDataIDs.forEach(function (id) {
495
- return _this5._changeEmitter.broadcastChangeForID(id);
496
- }); // Containers may be subscribed to "new" records in the case where they
497
- // were previously garbage collected or where the link was incrementally
498
- // loaded from cache prior to the linked record.
499
-
500
- createdDataIDs.forEach(function (id) {
501
- _this5._changeEmitter.broadcastChangeForID(id);
502
- });
503
- };
504
-
505
- _proto._getRecordWriterForMutation = function _getRecordWriterForMutation() {
506
- return new (require("./RelayRecordWriter"))(this._records, this._rootCallMap, false, // isOptimistic
507
- this._nodeRangeMap, this._cacheManager ? this._cacheManager.getMutationWriter() : null);
508
- };
509
-
510
- _proto.getRecordWriterForOptimisticMutation = function getRecordWriterForOptimisticMutation(clientMutationID) {
511
- return new (require("./RelayRecordWriter"))(this._queuedRecords, this._rootCallMap, true, // isOptimistic
512
- this._nodeRangeMap, null, // don't cache optimistic data
513
- clientMutationID);
514
- };
515
-
516
- _proto.toJSON = function toJSON() {
517
- /**
518
- * A util function which remove the querypath from the record. Used to stringify the RecordMap.
519
- */
520
- var getRecordsWithoutPaths = function getRecordsWithoutPaths(recordMap) {
521
- if (!recordMap) {
522
- return null;
523
- }
524
-
525
- return require("fbjs/lib/mapObject")(recordMap, function (record) {
526
- var nextRecord = (0, _objectSpread2["default"])({}, record);
527
- delete nextRecord[require("./RelayRecord").MetadataKey.PATH];
528
- return nextRecord;
529
- });
530
- };
531
-
532
- return {
533
- cachedRecords: getRecordsWithoutPaths(this._cachedRecords),
534
- cachedRootCallMap: this._cachedRootCallMap,
535
- queuedRecords: getRecordsWithoutPaths(this._queuedRecords),
536
- records: getRecordsWithoutPaths(this._records),
537
- rootCallMap: this._rootCallMap,
538
- nodeRangeMap: this._nodeRangeMap
539
- };
540
- };
541
- /* $FlowFixMe: This comment suppresses an error caught by Flow 0.59 which was
542
- * not caught before. Most likely, this error is because an exported function
543
- * parameter is missing an annotation. Without an annotation, these parameters
544
- * are uncovered by Flow. */
545
-
546
-
547
- RelayStoreData.fromJSON = function fromJSON(obj) {
548
- !obj ? process.env.NODE_ENV !== "production" ? require("fbjs/lib/invariant")(false, 'RelayStoreData: JSON object is empty') : require("fbjs/lib/invariant")(false) : void 0;
549
- var cachedRecords = obj.cachedRecords,
550
- cachedRootCallMap = obj.cachedRootCallMap,
551
- queuedRecords = obj.queuedRecords,
552
- records = obj.records,
553
- rootCallMap = obj.rootCallMap,
554
- nodeRangeMap = obj.nodeRangeMap;
555
- deserializeRecordRanges(cachedRecords);
556
- deserializeRecordRanges(queuedRecords);
557
- deserializeRecordRanges(records);
558
- return new RelayStoreData(cachedRecords, cachedRootCallMap, queuedRecords, records, rootCallMap, nodeRangeMap);
559
- };
560
-
561
- return RelayStoreData;
562
- }();
563
- /**
564
- * A helper function which checks for serialized GraphQLRange
565
- * instances and deserializes them in toJSON()
566
- */
567
-
568
-
569
- function deserializeRecordRanges(records) {
570
- for (var _key in records) {
571
- var record = records[_key];
572
- var range = record.__range__;
573
-
574
- if (range) {
575
- record.__range__ = require("./GraphQLRange").fromJSON(range);
576
- }
577
- }
578
- }
579
- /**
580
- * Given an OSS query and response, returns an array of information
581
- * corresponding to each root field with items as follows:
582
- * - `field`: the root field from the input query
583
- * - `root`: the synthesized RelayQueryRoot corresponding to that field
584
- * - `rootPayload`: the payload for that `root`
585
- */
586
-
587
-
588
- function getRootsWithPayloads(query, response) {
589
- var results = [];
590
- query.getChildren().forEach(function (child) {
591
- var field = child;
592
-
593
- if (!(field instanceof require("./RelayQuery").Field) || !field.canHaveSubselections()) {
594
- // Only care about linked fields
595
- return;
596
- } // Get the concrete field from the RelayQueryField
597
-
598
-
599
- var concreteField = require("nullthrows")(require("./QueryBuilder").getField(field.getConcreteQueryNode())); // Build the identifying argument for the query
600
-
601
-
602
- var identifyingArgName;
603
- var identifyingArgType;
604
- var identifyingArg = concreteField.calls && concreteField.calls[0];
605
-
606
- if (identifyingArg) {
607
- identifyingArgName = identifyingArg.name;
608
- identifyingArgType = identifyingArg.metadata && identifyingArg.metadata.type;
609
- } // Build the concrete query
610
-
611
-
612
- var concreteQuery = {
613
- calls: concreteField.calls,
614
- children: concreteField.children,
615
- directives: [],
616
- // @include/@skip directives are processed within getChildren()
617
- fieldName: concreteField.fieldName,
618
- isDeferred: false,
619
- kind: 'Query',
620
- metadata: {
621
- identifyingArgName: identifyingArgName,
622
- identifyingArgType: identifyingArgType,
623
- isAbstract: concreteField.metadata && concreteField.metadata.isAbstract,
624
- isPlural: concreteField.metadata && concreteField.metadata.isPlural
625
- },
626
- name: query.getName(),
627
- // Note that classic queries are typed as the type of the root field, not
628
- // the `Query` type
629
- type: field.getType()
630
- }; // Construct a root query
631
-
632
- var root = require("./RelayQuery").Root.create(concreteQuery, require("./RelayMetaRoute").get('$RelayEnvironment'), query.getVariables()); // Construct the payload that would have been returned had `root` been
633
- // used to fetch data.
634
-
635
-
636
- var serializationKey = field.getSerializationKey();
637
- var rootPayload = {};
638
-
639
- if (!response.hasOwnProperty(serializationKey)) {
640
- // Data is missing for this field. This can occur when the field is empty
641
- // due to a failing conditional (@include/@skip) in its subtree.
642
- return;
643
- }
644
-
645
- rootPayload[root.getFieldName()] = response[serializationKey];
646
- results.push({
647
- field: field,
648
- root: root,
649
- rootPayload: rootPayload
650
- });
651
- });
652
- return results;
653
- }
654
-
655
- require("relay-runtime").RelayProfiler.instrumentMethods(RelayStoreData.prototype, {
656
- handleQueryPayload: 'RelayStoreData.prototype.handleQueryPayload',
657
- handleUpdatePayload: 'RelayStoreData.prototype.handleUpdatePayload'
658
- });
659
-
660
- module.exports = RelayStoreData;