relay-runtime 11.0.0 → 13.0.0-rc.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 (169) hide show
  1. package/handlers/RelayDefaultHandlerProvider.js.flow +2 -2
  2. package/handlers/connection/ConnectionHandler.js.flow +8 -10
  3. package/handlers/connection/MutationHandlers.js.flow +31 -7
  4. package/index.js +1 -1
  5. package/index.js.flow +60 -36
  6. package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
  7. package/lib/handlers/connection/ConnectionHandler.js +8 -8
  8. package/lib/handlers/connection/MutationHandlers.js +61 -5
  9. package/lib/index.js +58 -43
  10. package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
  11. package/lib/multi-actor-environment/ActorSpecificEnvironment.js +152 -0
  12. package/lib/multi-actor-environment/ActorUtils.js +27 -0
  13. package/lib/multi-actor-environment/MultiActorEnvironment.js +419 -0
  14. package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
  15. package/lib/multi-actor-environment/index.js +21 -0
  16. package/lib/mutations/RelayDeclarativeMutationConfig.js +4 -1
  17. package/lib/mutations/RelayRecordProxy.js +3 -2
  18. package/lib/mutations/RelayRecordSourceMutator.js +3 -2
  19. package/lib/mutations/RelayRecordSourceProxy.js +12 -4
  20. package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -5
  21. package/lib/mutations/applyOptimisticMutation.js +6 -6
  22. package/lib/mutations/commitMutation.js +14 -10
  23. package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +238 -0
  24. package/lib/mutations/validateMutation.js +12 -5
  25. package/lib/network/ConvertToExecuteFunction.js +2 -1
  26. package/lib/network/RelayNetwork.js +3 -2
  27. package/lib/network/RelayQueryResponseCache.js +21 -4
  28. package/lib/network/wrapNetworkWithLogObserver.js +79 -0
  29. package/lib/query/GraphQLTag.js +3 -2
  30. package/lib/query/fetchQuery.js +6 -5
  31. package/lib/query/fetchQueryInternal.js +1 -1
  32. package/lib/query/fetchQuery_DEPRECATED.js +2 -1
  33. package/lib/store/ClientID.js +7 -1
  34. package/lib/store/DataChecker.js +141 -60
  35. package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +532 -195
  36. package/lib/store/RelayConcreteVariables.js +24 -4
  37. package/lib/store/RelayModernEnvironment.js +175 -234
  38. package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
  39. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  40. package/lib/store/RelayModernRecord.js +47 -12
  41. package/lib/store/RelayModernSelector.js +14 -8
  42. package/lib/store/RelayModernStore.js +58 -29
  43. package/lib/store/RelayOperationTracker.js +34 -24
  44. package/lib/store/RelayPublishQueue.js +41 -13
  45. package/lib/store/RelayReader.js +287 -46
  46. package/lib/store/RelayRecordSource.js +87 -3
  47. package/lib/store/RelayReferenceMarker.js +55 -31
  48. package/lib/store/RelayResponseNormalizer.js +250 -108
  49. package/lib/store/RelayStoreReactFlightUtils.js +8 -12
  50. package/lib/store/RelayStoreSubscriptions.js +14 -9
  51. package/lib/store/RelayStoreUtils.js +11 -5
  52. package/lib/store/ResolverCache.js +213 -0
  53. package/lib/store/ResolverFragments.js +61 -0
  54. package/lib/store/cloneRelayHandleSourceField.js +5 -4
  55. package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
  56. package/lib/store/createRelayContext.js +4 -2
  57. package/lib/store/defaultGetDataID.js +3 -1
  58. package/lib/store/readInlineData.js +6 -2
  59. package/lib/subscription/requestSubscription.js +35 -9
  60. package/lib/util/RelayConcreteNode.js +4 -0
  61. package/lib/util/RelayFeatureFlags.js +11 -4
  62. package/lib/util/RelayProfiler.js +17 -187
  63. package/lib/util/RelayReplaySubject.js +22 -7
  64. package/lib/util/RelayRuntimeTypes.js +0 -6
  65. package/lib/util/StringInterner.js +71 -0
  66. package/lib/util/deepFreeze.js +1 -0
  67. package/lib/util/getFragmentIdentifier.js +15 -7
  68. package/lib/util/getOperation.js +2 -1
  69. package/lib/util/getPaginationMetadata.js +41 -0
  70. package/lib/util/getPaginationVariables.js +66 -0
  71. package/lib/util/getPendingOperationsForFragment.js +55 -0
  72. package/lib/util/getRefetchMetadata.js +36 -0
  73. package/lib/util/getRelayHandleKey.js +2 -2
  74. package/lib/util/getRequestIdentifier.js +2 -2
  75. package/lib/util/getValueAtPath.js +51 -0
  76. package/lib/util/isEmptyObject.js +1 -1
  77. package/lib/util/registerEnvironmentWithDevTools.js +26 -0
  78. package/lib/util/withDuration.js +31 -0
  79. package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
  80. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +225 -0
  81. package/multi-actor-environment/ActorUtils.js.flow +33 -0
  82. package/multi-actor-environment/MultiActorEnvironment.js.flow +506 -0
  83. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +261 -0
  84. package/multi-actor-environment/index.js.flow +26 -0
  85. package/mutations/RelayDeclarativeMutationConfig.js.flow +32 -26
  86. package/mutations/RelayRecordProxy.js.flow +4 -5
  87. package/mutations/RelayRecordSourceMutator.js.flow +4 -6
  88. package/mutations/RelayRecordSourceProxy.js.flow +19 -10
  89. package/mutations/RelayRecordSourceSelectorProxy.js.flow +22 -7
  90. package/mutations/applyOptimisticMutation.js.flow +13 -14
  91. package/mutations/commitLocalUpdate.js.flow +1 -1
  92. package/mutations/commitMutation.js.flow +35 -46
  93. package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +309 -0
  94. package/mutations/validateMutation.js.flow +28 -16
  95. package/network/ConvertToExecuteFunction.js.flow +2 -2
  96. package/network/RelayNetwork.js.flow +4 -5
  97. package/network/RelayNetworkTypes.js.flow +17 -8
  98. package/network/RelayObservable.js.flow +1 -1
  99. package/network/RelayQueryResponseCache.js.flow +34 -20
  100. package/network/wrapNetworkWithLogObserver.js.flow +100 -0
  101. package/package.json +3 -2
  102. package/query/GraphQLTag.js.flow +9 -9
  103. package/query/PreloadableQueryRegistry.js.flow +2 -1
  104. package/query/fetchQuery.js.flow +11 -13
  105. package/query/fetchQueryInternal.js.flow +6 -9
  106. package/query/fetchQuery_DEPRECATED.js.flow +6 -6
  107. package/relay-runtime.js +2 -2
  108. package/relay-runtime.min.js +2 -2
  109. package/store/ClientID.js.flow +14 -3
  110. package/store/DataChecker.js.flow +162 -67
  111. package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +616 -283
  112. package/store/RelayConcreteVariables.js.flow +27 -5
  113. package/store/RelayModernEnvironment.js.flow +176 -235
  114. package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
  115. package/store/RelayModernOperationDescriptor.js.flow +12 -7
  116. package/store/RelayModernRecord.js.flow +67 -11
  117. package/store/RelayModernSelector.js.flow +24 -14
  118. package/store/RelayModernStore.js.flow +72 -36
  119. package/store/RelayOperationTracker.js.flow +59 -43
  120. package/store/RelayOptimisticRecordSource.js.flow +2 -2
  121. package/store/RelayPublishQueue.js.flow +79 -34
  122. package/store/RelayReader.js.flow +351 -72
  123. package/store/RelayRecordSource.js.flow +72 -6
  124. package/store/RelayReferenceMarker.js.flow +60 -33
  125. package/store/RelayResponseNormalizer.js.flow +288 -102
  126. package/store/RelayStoreReactFlightUtils.js.flow +9 -13
  127. package/store/RelayStoreSubscriptions.js.flow +19 -11
  128. package/store/RelayStoreTypes.js.flow +210 -44
  129. package/store/RelayStoreUtils.js.flow +25 -11
  130. package/store/ResolverCache.js.flow +249 -0
  131. package/store/ResolverFragments.js.flow +121 -0
  132. package/store/StoreInspector.js.flow +2 -2
  133. package/store/TypeID.js.flow +1 -1
  134. package/store/ViewerPattern.js.flow +2 -2
  135. package/store/cloneRelayHandleSourceField.js.flow +5 -6
  136. package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
  137. package/store/createFragmentSpecResolver.js.flow +3 -4
  138. package/store/createRelayContext.js.flow +3 -3
  139. package/store/defaultGetDataID.js.flow +3 -1
  140. package/store/normalizeRelayPayload.js.flow +6 -7
  141. package/store/readInlineData.js.flow +7 -8
  142. package/subscription/requestSubscription.js.flow +54 -27
  143. package/util/NormalizationNode.js.flow +16 -3
  144. package/util/ReaderNode.js.flow +38 -2
  145. package/util/RelayConcreteNode.js.flow +4 -0
  146. package/util/RelayFeatureFlags.js.flow +24 -8
  147. package/util/RelayProfiler.js.flow +22 -194
  148. package/util/RelayReplaySubject.js.flow +9 -9
  149. package/util/RelayRuntimeTypes.js.flow +73 -4
  150. package/util/StringInterner.js.flow +69 -0
  151. package/util/createPayloadFor3DField.js.flow +3 -3
  152. package/util/deepFreeze.js.flow +2 -1
  153. package/util/getFragmentIdentifier.js.flow +27 -15
  154. package/util/getOperation.js.flow +2 -2
  155. package/util/getPaginationMetadata.js.flow +72 -0
  156. package/util/getPaginationVariables.js.flow +108 -0
  157. package/util/getPendingOperationsForFragment.js.flow +62 -0
  158. package/util/getRefetchMetadata.js.flow +79 -0
  159. package/util/getRelayHandleKey.js.flow +1 -2
  160. package/util/getRequestIdentifier.js.flow +3 -3
  161. package/util/getValueAtPath.js.flow +46 -0
  162. package/util/isEmptyObject.js.flow +2 -1
  163. package/util/registerEnvironmentWithDevTools.js.flow +33 -0
  164. package/util/resolveImmediate.js.flow +1 -1
  165. package/util/withDuration.js.flow +32 -0
  166. package/lib/store/RelayRecordSourceMapImpl.js +0 -107
  167. package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
  168. package/store/RelayRecordSourceMapImpl.js.flow +0 -91
  169. package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
@@ -0,0 +1,419 @@
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
+ * @emails oncall+relay
8
+ *
9
+ * @format
10
+ */
11
+ 'use strict';
12
+
13
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
14
+
15
+ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
+
17
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
18
+
19
+ var RelayDefaultHandlerProvider = require('../handlers/RelayDefaultHandlerProvider');
20
+
21
+ var RelayObservable = require('../network/RelayObservable');
22
+
23
+ var defaultGetDataID = require('../store/defaultGetDataID');
24
+
25
+ var defaultRequiredFieldLogger = require('../store/defaultRequiredFieldLogger');
26
+
27
+ var OperationExecutor = require('../store/OperationExecutor');
28
+
29
+ var RelayModernStore = require('../store/RelayModernStore');
30
+
31
+ var RelayRecordSource = require('../store/RelayRecordSource');
32
+
33
+ var ActorSpecificEnvironment = require('./ActorSpecificEnvironment');
34
+
35
+ var MultiActorEnvironment = /*#__PURE__*/function () {
36
+ function MultiActorEnvironment(config) {
37
+ var _config$getDataID, _config$logFn, _config$requiredField, _config$treatMissingF, _config$isServer, _config$defaultRender;
38
+
39
+ this._actorEnvironments = new Map();
40
+ this._operationLoader = config.operationLoader;
41
+ this._createNetworkForActor = config.createNetworkForActor;
42
+ this._scheduler = config.scheduler;
43
+ this._getDataID = (_config$getDataID = config.getDataID) !== null && _config$getDataID !== void 0 ? _config$getDataID : defaultGetDataID;
44
+ this._handlerProvider = config.handlerProvider ? config.handlerProvider : RelayDefaultHandlerProvider;
45
+ this._logFn = (_config$logFn = config.logFn) !== null && _config$logFn !== void 0 ? _config$logFn : emptyFunction;
46
+ this._operationExecutions = new Map();
47
+ this._requiredFieldLogger = (_config$requiredField = config.requiredFieldLogger) !== null && _config$requiredField !== void 0 ? _config$requiredField : defaultRequiredFieldLogger;
48
+ this._shouldProcessClientComponents = config.shouldProcessClientComponents;
49
+ this._treatMissingFieldsAsNull = (_config$treatMissingF = config.treatMissingFieldsAsNull) !== null && _config$treatMissingF !== void 0 ? _config$treatMissingF : false;
50
+ this._isServer = (_config$isServer = config.isServer) !== null && _config$isServer !== void 0 ? _config$isServer : false;
51
+ this._missingFieldHandlers = config.missingFieldHandlers;
52
+ this._createStoreForActor = config.createStoreForActor;
53
+ this._reactFlightPayloadDeserializer = config.reactFlightPayloadDeserializer;
54
+ this._reactFlightServerErrorHandler = config.reactFlightServerErrorHandler;
55
+ this._createConfigNameForActor = config.createConfigNameForActor;
56
+ this._defaultRenderPolicy = (_config$defaultRender = config.defaultRenderPolicy) !== null && _config$defaultRender !== void 0 ? _config$defaultRender : 'partial';
57
+ }
58
+ /**
59
+ * This method will create an actor specific environment. It will create a new instance
60
+ * and store it in the internal maps. If will return a memoized version
61
+ * of the environment if we already created one for actor.
62
+ */
63
+
64
+
65
+ var _proto = MultiActorEnvironment.prototype;
66
+
67
+ _proto.forActor = function forActor(actorIdentifier) {
68
+ var environment = this._actorEnvironments.get(actorIdentifier);
69
+
70
+ if (environment == null) {
71
+ var newEnvironment = new ActorSpecificEnvironment({
72
+ configName: this._createConfigNameForActor ? this._createConfigNameForActor(actorIdentifier) : null,
73
+ actorIdentifier: actorIdentifier,
74
+ multiActorEnvironment: this,
75
+ logFn: this._logFn,
76
+ requiredFieldLogger: this._requiredFieldLogger,
77
+ store: this._createStoreForActor != null ? this._createStoreForActor(actorIdentifier) : new RelayModernStore(RelayRecordSource.create()),
78
+ network: this._createNetworkForActor(actorIdentifier),
79
+ handlerProvider: this._handlerProvider,
80
+ defaultRenderPolicy: this._defaultRenderPolicy
81
+ });
82
+
83
+ this._actorEnvironments.set(actorIdentifier, newEnvironment);
84
+
85
+ return newEnvironment;
86
+ } else {
87
+ return environment;
88
+ }
89
+ };
90
+
91
+ _proto.check = function check(actorEnvironment, operation) {
92
+ var _this = this;
93
+
94
+ if (this._missingFieldHandlers == null || this._missingFieldHandlers.length === 0) {
95
+ return actorEnvironment.getStore().check(operation, {
96
+ handlers: [],
97
+ defaultActorIdentifier: actorEnvironment.actorIdentifier,
98
+ getSourceForActor: function getSourceForActor(actorIdentifier) {
99
+ return _this.forActor(actorIdentifier).getStore().getSource();
100
+ },
101
+ getTargetForActor: function getTargetForActor() {
102
+ return RelayRecordSource.create();
103
+ }
104
+ });
105
+ }
106
+
107
+ return this._checkSelectorAndHandleMissingFields(actorEnvironment, operation, this._missingFieldHandlers);
108
+ };
109
+
110
+ _proto._checkSelectorAndHandleMissingFields = function _checkSelectorAndHandleMissingFields(actorEnvironment, operation, handlers) {
111
+ var _this2 = this;
112
+
113
+ var targets = new Map([[actorEnvironment.actorIdentifier, RelayRecordSource.create()]]);
114
+ var result = actorEnvironment.getStore().check(operation, {
115
+ handlers: handlers,
116
+ defaultActorIdentifier: actorEnvironment.actorIdentifier,
117
+ getSourceForActor: function getSourceForActor(actorIdentifier) {
118
+ return _this2.forActor(actorIdentifier).getStore().getSource();
119
+ },
120
+ getTargetForActor: function getTargetForActor(actorIdentifier) {
121
+ var target = targets.get(actorIdentifier);
122
+
123
+ if (target == null) {
124
+ target = RelayRecordSource.create();
125
+ targets.set(actorIdentifier, target);
126
+ }
127
+
128
+ return target;
129
+ }
130
+ });
131
+
132
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(targets),
133
+ _step;
134
+
135
+ try {
136
+ var _loop = function _loop() {
137
+ var _step$value = _step.value,
138
+ actorIdentifier = _step$value[0],
139
+ target = _step$value[1];
140
+
141
+ if (target.size() > 0) {
142
+ _this2._scheduleUpdates(function () {
143
+ var publishQueue = _this2.forActor(actorIdentifier).getPublishQueue();
144
+
145
+ publishQueue.commitSource(target);
146
+ publishQueue.run();
147
+ });
148
+ }
149
+ };
150
+
151
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
152
+ _loop();
153
+ }
154
+ } catch (err) {
155
+ _iterator.e(err);
156
+ } finally {
157
+ _iterator.f();
158
+ }
159
+
160
+ return result;
161
+ };
162
+
163
+ _proto.subscribe = function subscribe(actorEnvironment, snapshot, callback) {
164
+ // TODO: make actor aware
165
+ return actorEnvironment.getStore().subscribe(snapshot, callback);
166
+ };
167
+
168
+ _proto.retain = function retain(actorEnvironment, operation) {
169
+ // TODO: make actor aware
170
+ return actorEnvironment.getStore().retain(operation);
171
+ };
172
+
173
+ _proto.applyUpdate = function applyUpdate(actorEnvironment, optimisticUpdate) {
174
+ var _this3 = this;
175
+
176
+ var publishQueue = actorEnvironment.getPublishQueue();
177
+
178
+ var dispose = function dispose() {
179
+ _this3._scheduleUpdates(function () {
180
+ publishQueue.revertUpdate(optimisticUpdate);
181
+ publishQueue.run();
182
+ });
183
+ };
184
+
185
+ this._scheduleUpdates(function () {
186
+ publishQueue.applyUpdate(optimisticUpdate);
187
+ publishQueue.run();
188
+ });
189
+
190
+ return {
191
+ dispose: dispose
192
+ };
193
+ };
194
+
195
+ _proto.revertUpdate = function revertUpdate(actorEnvironment, update) {
196
+ var publishQueue = actorEnvironment.getPublishQueue();
197
+
198
+ this._scheduleUpdates(function () {
199
+ publishQueue.revertUpdate(update);
200
+ publishQueue.run();
201
+ });
202
+ };
203
+
204
+ _proto.replaceUpdate = function replaceUpdate(actorEnvironment, update, replacement) {
205
+ var publishQueue = actorEnvironment.getPublishQueue();
206
+
207
+ this._scheduleUpdates(function () {
208
+ publishQueue.revertUpdate(update);
209
+ publishQueue.applyUpdate(replacement);
210
+ publishQueue.run();
211
+ });
212
+ };
213
+
214
+ _proto.applyMutation = function applyMutation(actorEnvironment, optimisticConfig) {
215
+ var subscription = this._execute(actorEnvironment, {
216
+ createSource: function createSource() {
217
+ return RelayObservable.create(function (_sink) {});
218
+ },
219
+ isClientPayload: false,
220
+ operation: optimisticConfig.operation,
221
+ optimisticConfig: optimisticConfig,
222
+ updater: null
223
+ }).subscribe({});
224
+
225
+ return {
226
+ dispose: function dispose() {
227
+ return subscription.unsubscribe();
228
+ }
229
+ };
230
+ };
231
+
232
+ _proto.commitUpdate = function commitUpdate(actorEnvironment, updater) {
233
+ var publishQueue = actorEnvironment.getPublishQueue();
234
+
235
+ this._scheduleUpdates(function () {
236
+ publishQueue.commitUpdate(updater);
237
+ publishQueue.run();
238
+ });
239
+ };
240
+
241
+ _proto.commitPayload = function commitPayload(actorEnvironment, operationDescriptor, payload) {
242
+ this._execute(actorEnvironment, {
243
+ createSource: function createSource() {
244
+ return RelayObservable.from({
245
+ data: payload
246
+ });
247
+ },
248
+ isClientPayload: true,
249
+ operation: operationDescriptor,
250
+ optimisticConfig: null,
251
+ updater: null
252
+ }).subscribe({});
253
+ };
254
+
255
+ _proto.lookup = function lookup(actorEnvironment, selector) {
256
+ // TODO: make actor aware
257
+ return actorEnvironment.getStore().lookup(selector);
258
+ };
259
+
260
+ _proto.execute = function execute(actorEnvironment, _ref) {
261
+ var operation = _ref.operation;
262
+ return this._execute(actorEnvironment, {
263
+ createSource: function createSource() {
264
+ return actorEnvironment.getNetwork().execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null);
265
+ },
266
+ isClientPayload: false,
267
+ operation: operation,
268
+ optimisticConfig: null,
269
+ updater: null
270
+ });
271
+ };
272
+
273
+ _proto.executeSubscription = function executeSubscription(actorEnvironment, _ref2) {
274
+ var operation = _ref2.operation,
275
+ updater = _ref2.updater;
276
+ return this._execute(actorEnvironment, {
277
+ createSource: function createSource() {
278
+ return actorEnvironment.getNetwork().execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null);
279
+ },
280
+ isClientPayload: false,
281
+ operation: operation,
282
+ optimisticConfig: null,
283
+ updater: updater
284
+ });
285
+ };
286
+
287
+ _proto.executeMutation = function executeMutation(actorEnvironment, _ref3) {
288
+ var operation = _ref3.operation,
289
+ optimisticResponse = _ref3.optimisticResponse,
290
+ optimisticUpdater = _ref3.optimisticUpdater,
291
+ updater = _ref3.updater,
292
+ uploadables = _ref3.uploadables;
293
+ var optimisticConfig;
294
+
295
+ if (optimisticResponse || optimisticUpdater) {
296
+ optimisticConfig = {
297
+ operation: operation,
298
+ response: optimisticResponse,
299
+ updater: optimisticUpdater
300
+ };
301
+ }
302
+
303
+ return this._execute(actorEnvironment, {
304
+ createSource: function createSource() {
305
+ return actorEnvironment.getNetwork().execute(operation.request.node.params, operation.request.variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, operation.request.cacheConfig), {}, {
306
+ force: true
307
+ }), uploadables);
308
+ },
309
+ isClientPayload: false,
310
+ operation: operation,
311
+ optimisticConfig: optimisticConfig,
312
+ updater: updater
313
+ });
314
+ };
315
+
316
+ _proto.executeWithSource = function executeWithSource(actorEnvironment, config) {
317
+ return this._execute(actorEnvironment, {
318
+ createSource: function createSource() {
319
+ return config.source;
320
+ },
321
+ isClientPayload: false,
322
+ operation: config.operation,
323
+ optimisticConfig: null,
324
+ updater: null
325
+ });
326
+ };
327
+
328
+ _proto.isRequestActive = function isRequestActive(_actorEnvironment, requestIdentifier) {
329
+ var activeState = this._operationExecutions.get(requestIdentifier);
330
+
331
+ return activeState === 'active';
332
+ };
333
+
334
+ _proto.isServer = function isServer() {
335
+ return this._isServer;
336
+ };
337
+
338
+ _proto._execute = function _execute(actorEnvironment, _ref4) {
339
+ var _this4 = this;
340
+
341
+ var createSource = _ref4.createSource,
342
+ isClientPayload = _ref4.isClientPayload,
343
+ operation = _ref4.operation,
344
+ optimisticConfig = _ref4.optimisticConfig,
345
+ updater = _ref4.updater;
346
+ return RelayObservable.create(function (sink) {
347
+ var executor = OperationExecutor.execute({
348
+ actorIdentifier: actorEnvironment.actorIdentifier,
349
+ getDataID: _this4._getDataID,
350
+ isClientPayload: isClientPayload,
351
+ operation: operation,
352
+ operationExecutions: _this4._operationExecutions,
353
+ operationLoader: _this4._operationLoader,
354
+ operationTracker: actorEnvironment.getOperationTracker(),
355
+ optimisticConfig: optimisticConfig,
356
+ getPublishQueue: function getPublishQueue(actorIdentifier) {
357
+ return _this4.forActor(actorIdentifier).getPublishQueue();
358
+ },
359
+ reactFlightPayloadDeserializer: _this4._reactFlightPayloadDeserializer,
360
+ reactFlightServerErrorHandler: _this4._reactFlightServerErrorHandler,
361
+ scheduler: _this4._scheduler,
362
+ shouldProcessClientComponents: _this4._shouldProcessClientComponents,
363
+ sink: sink,
364
+ // NOTE: Some product tests expect `Network.execute` to be called only
365
+ // when the Observable is executed.
366
+ source: createSource(),
367
+ getStore: function getStore(actorIdentifier) {
368
+ return _this4.forActor(actorIdentifier).getStore();
369
+ },
370
+ treatMissingFieldsAsNull: _this4._treatMissingFieldsAsNull,
371
+ updater: updater,
372
+ log: _this4._logFn
373
+ });
374
+ return function () {
375
+ return executor.cancel();
376
+ };
377
+ });
378
+ };
379
+
380
+ _proto._scheduleUpdates = function _scheduleUpdates(task) {
381
+ var scheduler = this._scheduler;
382
+
383
+ if (scheduler != null) {
384
+ scheduler.schedule(task);
385
+ } else {
386
+ task();
387
+ }
388
+ };
389
+
390
+ _proto.commitMultiActorUpdate = function commitMultiActorUpdate(updater) {
391
+ var _iterator2 = (0, _createForOfIteratorHelper2["default"])(this._actorEnvironments),
392
+ _step2;
393
+
394
+ try {
395
+ var _loop2 = function _loop2() {
396
+ var _step2$value = _step2.value,
397
+ actorIdentifier = _step2$value[0],
398
+ environment = _step2$value[1];
399
+ environment.commitUpdate(function (storeProxy) {
400
+ updater(actorIdentifier, environment, storeProxy);
401
+ });
402
+ };
403
+
404
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
405
+ _loop2();
406
+ }
407
+ } catch (err) {
408
+ _iterator2.e(err);
409
+ } finally {
410
+ _iterator2.f();
411
+ }
412
+ };
413
+
414
+ return MultiActorEnvironment;
415
+ }();
416
+
417
+ function emptyFunction() {}
418
+
419
+ module.exports = MultiActorEnvironment;
@@ -0,0 +1,11 @@
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
+ * @emails oncall+relay
8
+ *
9
+ * @format
10
+ */
11
+ 'use strict';
@@ -0,0 +1,21 @@
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
+ * @emails oncall+relay
8
+ *
9
+ * @format
10
+ */
11
+ 'use strict';
12
+
13
+ var _require = require('./ActorIdentifier'),
14
+ getActorIdentifier = _require.getActorIdentifier;
15
+
16
+ var MultiActorEnvironment = require('./MultiActorEnvironment');
17
+
18
+ module.exports = {
19
+ MultiActorEnvironment: MultiActorEnvironment,
20
+ getActorIdentifier: getActorIdentifier
21
+ };
@@ -201,7 +201,10 @@ function rangeDelete(config, request) {
201
201
  return;
202
202
  }
203
203
 
204
- var deleteIDs = [];
204
+ var deleteIDs = []; // the type of data should come from a type parameter associated with ConcreteRequest,
205
+ // but ConcreteRequest does not contain a type parameter. Hence, we use a FlowFixMe.
206
+ // $FlowFixMe[incompatible-use] see above
207
+
205
208
  var deletedIDField = data[rootField];
206
209
 
207
210
  if (deletedIDField && Array.isArray(deletedIDFieldName)) {
@@ -10,20 +10,21 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var invariant = require("fbjs/lib/invariant");
14
-
15
13
  var _require = require('../store/ClientID'),
16
14
  generateClientID = _require.generateClientID;
17
15
 
18
16
  var _require2 = require('../store/RelayStoreUtils'),
19
17
  getStableStorageKey = _require2.getStableStorageKey;
20
18
 
19
+ var invariant = require('invariant');
21
20
  /**
22
21
  * @internal
23
22
  *
24
23
  * A helper class for manipulating a given record from a record source via an
25
24
  * imperative/OO-style API.
26
25
  */
26
+
27
+
27
28
  var RelayRecordProxy = /*#__PURE__*/function () {
28
29
  function RelayRecordProxy(source, mutator, dataID) {
29
30
  this._dataID = dataID;
@@ -12,11 +12,10 @@
12
12
 
13
13
  var RelayModernRecord = require('../store/RelayModernRecord');
14
14
 
15
- var invariant = require("fbjs/lib/invariant");
16
-
17
15
  var _require = require('../store/RelayRecordState'),
18
16
  EXISTENT = _require.EXISTENT;
19
17
 
18
+ var invariant = require('invariant');
20
19
  /**
21
20
  * @internal
22
21
  *
@@ -29,6 +28,8 @@ var _require = require('../store/RelayRecordState'),
29
28
  * - Modifications cause a fresh version of a record to be created in `sink`.
30
29
  * These sink records contain only modified fields.
31
30
  */
31
+
32
+
32
33
  var RelayRecordSourceMutator = /*#__PURE__*/function () {
33
34
  function RelayRecordSourceMutator(base, sink) {
34
35
  this.__sources = [sink, base];
@@ -12,10 +12,6 @@
12
12
 
13
13
  var RelayModernRecord = require('../store/RelayModernRecord');
14
14
 
15
- var RelayRecordProxy = require('./RelayRecordProxy');
16
-
17
- var invariant = require("fbjs/lib/invariant");
18
-
19
15
  var _require = require('../store/RelayRecordState'),
20
16
  EXISTENT = _require.EXISTENT,
21
17
  NONEXISTENT = _require.NONEXISTENT;
@@ -24,11 +20,19 @@ var _require2 = require('../store/RelayStoreUtils'),
24
20
  ROOT_ID = _require2.ROOT_ID,
25
21
  ROOT_TYPE = _require2.ROOT_TYPE;
26
22
 
23
+ var _require3 = require('./readUpdatableQuery_EXPERIMENTAL'),
24
+ _readUpdatableQuery_EXPERIMENTAL = _require3.readUpdatableQuery_EXPERIMENTAL;
25
+
26
+ var RelayRecordProxy = require('./RelayRecordProxy');
27
+
28
+ var invariant = require('invariant');
27
29
  /**
28
30
  * @internal
29
31
  *
30
32
  * A helper for manipulating a `RecordSource` via an imperative/OO-style API.
31
33
  */
34
+
35
+
32
36
  var RelayRecordSourceProxy = /*#__PURE__*/function () {
33
37
  function RelayRecordSourceProxy(mutator, getDataID, handlerProvider) {
34
38
  this.__mutator = mutator;
@@ -131,6 +135,10 @@ var RelayRecordSourceProxy = /*#__PURE__*/function () {
131
135
  return this._idsMarkedForInvalidation;
132
136
  };
133
137
 
138
+ _proto.readUpdatableQuery_EXPERIMENTAL = function readUpdatableQuery_EXPERIMENTAL(query, variables) {
139
+ return _readUpdatableQuery_EXPERIMENTAL(query, variables, this);
140
+ };
141
+
134
142
  return RelayRecordSourceProxy;
135
143
  }();
136
144
 
@@ -10,12 +10,14 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var invariant = require("fbjs/lib/invariant");
14
-
15
13
  var _require = require('../store/RelayStoreUtils'),
16
- getStorageKey = _require.getStorageKey,
17
- ROOT_TYPE = _require.ROOT_TYPE;
14
+ ROOT_TYPE = _require.ROOT_TYPE,
15
+ getStorageKey = _require.getStorageKey;
16
+
17
+ var _require2 = require('./readUpdatableQuery_EXPERIMENTAL'),
18
+ _readUpdatableQuery_EXPERIMENTAL = _require2.readUpdatableQuery_EXPERIMENTAL;
18
19
 
20
+ var invariant = require('invariant');
19
21
  /**
20
22
  * @internal
21
23
  *
@@ -24,6 +26,8 @@ var _require = require('../store/RelayStoreUtils'),
24
26
  * complex arguments and it can be tedious to re-construct the correct sets of
25
27
  * arguments to pass to e.g. `getRoot().getLinkedRecord()`.
26
28
  */
29
+
30
+
27
31
  var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
28
32
  function RelayRecordSourceSelectorProxy(mutator, recordSource, readSelector) {
29
33
  this.__mutator = mutator;
@@ -61,8 +65,13 @@ var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
61
65
 
62
66
  _proto._getRootField = function _getRootField(selector, fieldName, plural) {
63
67
  var field = selector.node.selections.find(function (selection) {
64
- return selection.kind === 'LinkedField' && selection.name === fieldName;
68
+ return selection.kind === 'LinkedField' && selection.name === fieldName || selection.kind === 'RequiredField' && selection.field.name === fieldName;
65
69
  });
70
+
71
+ if (field && field.kind === 'RequiredField') {
72
+ field = field.field;
73
+ }
74
+
66
75
  !(field && field.kind === 'LinkedField') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceSelectorProxy#getRootField(): Cannot find root ' + 'field `%s`, no such field is defined on GraphQL document `%s`.', fieldName, selector.node.name) : invariant(false) : void 0;
67
76
  !(field.plural === plural) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayRecordSourceSelectorProxy#getRootField(): Expected root field ' + '`%s` to be %s.', fieldName, plural ? 'plural' : 'singular') : invariant(false) : void 0;
68
77
  return field;
@@ -86,6 +95,10 @@ var RelayRecordSourceSelectorProxy = /*#__PURE__*/function () {
86
95
  this.__recordSource.invalidateStore();
87
96
  };
88
97
 
98
+ _proto.readUpdatableQuery_EXPERIMENTAL = function readUpdatableQuery_EXPERIMENTAL(query, variables) {
99
+ return _readUpdatableQuery_EXPERIMENTAL(query, variables, this);
100
+ };
101
+
89
102
  return RelayRecordSourceSelectorProxy;
90
103
  }();
91
104
 
@@ -10,18 +10,18 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
14
-
15
- var invariant = require("fbjs/lib/invariant");
16
-
17
- var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
18
-
19
13
  var _require = require('../query/GraphQLTag'),
20
14
  getRequest = _require.getRequest;
21
15
 
16
+ var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
17
+
22
18
  var _require2 = require('../store/RelayModernOperationDescriptor'),
23
19
  createOperationDescriptor = _require2.createOperationDescriptor;
24
20
 
21
+ var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
22
+
23
+ var invariant = require('invariant');
24
+
25
25
  /**
26
26
  * Higher-level helper function to execute a mutation against a specific
27
27
  * environment.
@@ -14,25 +14,25 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
16
 
17
- var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
18
-
19
- var invariant = require("fbjs/lib/invariant");
20
-
21
- var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
22
-
23
- var validateMutation = require('./validateMutation');
24
-
25
- var warning = require("fbjs/lib/warning");
26
-
27
17
  var _require = require('../query/GraphQLTag'),
28
18
  getRequest = _require.getRequest;
29
19
 
30
20
  var _require2 = require('../store/ClientID'),
31
21
  generateUniqueClientID = _require2.generateUniqueClientID;
32
22
 
23
+ var isRelayModernEnvironment = require('../store/isRelayModernEnvironment');
24
+
33
25
  var _require3 = require('../store/RelayModernOperationDescriptor'),
34
26
  createOperationDescriptor = _require3.createOperationDescriptor;
35
27
 
28
+ var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
29
+
30
+ var validateMutation = require('./validateMutation');
31
+
32
+ var invariant = require('invariant');
33
+
34
+ var warning = require("fbjs/lib/warning");
35
+
36
36
  /**
37
37
  * Higher-level helper function to execute a mutation against a specific
38
38
  * environment.
@@ -87,6 +87,8 @@ function commitMutation(environment, config) {
87
87
  uploadables: uploadables
88
88
  }).subscribe({
89
89
  next: function next(payload) {
90
+ var _config$onNext;
91
+
90
92
  if (Array.isArray(payload)) {
91
93
  payload.forEach(function (item) {
92
94
  if (item.errors) {
@@ -98,6 +100,8 @@ function commitMutation(environment, config) {
98
100
  errors.push.apply(errors, (0, _toConsumableArray2["default"])(payload.errors));
99
101
  }
100
102
  }
103
+
104
+ (_config$onNext = config.onNext) === null || _config$onNext === void 0 ? void 0 : _config$onNext.call(config);
101
105
  },
102
106
  complete: function complete() {
103
107
  var onCompleted = config.onCompleted;