relay-runtime 11.0.2 → 13.0.0-rc.2

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 (219) hide show
  1. package/README.md +67 -0
  2. package/handlers/RelayDefaultHandlerProvider.js.flow +3 -3
  3. package/handlers/connection/ConnectionHandler.js.flow +9 -18
  4. package/handlers/connection/ConnectionInterface.js.flow +1 -1
  5. package/handlers/connection/MutationHandlers.js.flow +8 -12
  6. package/index.js +1 -1
  7. package/index.js.flow +57 -35
  8. package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
  9. package/lib/handlers/connection/ConnectionHandler.js +13 -19
  10. package/lib/handlers/connection/ConnectionInterface.js +1 -1
  11. package/lib/handlers/connection/MutationHandlers.js +4 -7
  12. package/lib/index.js +59 -44
  13. package/lib/multi-actor-environment/ActorIdentifier.js +12 -2
  14. package/lib/multi-actor-environment/ActorSpecificEnvironment.js +64 -20
  15. package/lib/multi-actor-environment/ActorUtils.js +27 -0
  16. package/lib/multi-actor-environment/MultiActorEnvironment.js +324 -61
  17. package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +1 -1
  18. package/lib/multi-actor-environment/index.js +6 -2
  19. package/lib/mutations/RelayDeclarativeMutationConfig.js +5 -2
  20. package/lib/mutations/RelayRecordProxy.js +4 -3
  21. package/lib/mutations/RelayRecordSourceMutator.js +4 -3
  22. package/lib/mutations/RelayRecordSourceProxy.js +13 -5
  23. package/lib/mutations/RelayRecordSourceSelectorProxy.js +19 -6
  24. package/lib/mutations/applyOptimisticMutation.js +7 -7
  25. package/lib/mutations/commitLocalUpdate.js +1 -1
  26. package/lib/mutations/commitMutation.js +15 -11
  27. package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +242 -0
  28. package/lib/mutations/validateMutation.js +11 -6
  29. package/lib/network/ConvertToExecuteFunction.js +3 -2
  30. package/lib/network/RelayNetwork.js +4 -3
  31. package/lib/network/RelayNetworkTypes.js +1 -1
  32. package/lib/network/RelayObservable.js +1 -1
  33. package/lib/network/RelayQueryResponseCache.js +22 -6
  34. package/lib/network/wrapNetworkWithLogObserver.js +79 -0
  35. package/lib/query/GraphQLTag.js +3 -2
  36. package/lib/query/PreloadableQueryRegistry.js +1 -1
  37. package/lib/query/fetchQuery.js +7 -6
  38. package/lib/query/fetchQueryInternal.js +1 -1
  39. package/lib/query/fetchQuery_DEPRECATED.js +3 -2
  40. package/lib/store/ClientID.js +8 -2
  41. package/lib/store/DataChecker.js +124 -55
  42. package/lib/store/OperationExecutor.js +489 -215
  43. package/lib/store/RelayConcreteVariables.js +27 -9
  44. package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
  45. package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
  46. package/lib/store/RelayModernEnvironment.js +100 -120
  47. package/lib/store/RelayModernFragmentSpecResolver.js +53 -27
  48. package/lib/store/RelayModernOperationDescriptor.js +3 -2
  49. package/lib/store/RelayModernRecord.js +48 -13
  50. package/lib/store/RelayModernSelector.js +15 -9
  51. package/lib/store/RelayModernStore.js +56 -23
  52. package/lib/store/RelayOperationTracker.js +34 -24
  53. package/lib/store/RelayOptimisticRecordSource.js +1 -1
  54. package/lib/store/RelayPublishQueue.js +35 -11
  55. package/lib/store/RelayReader.js +257 -72
  56. package/lib/store/RelayRecordSource.js +88 -4
  57. package/lib/store/RelayRecordState.js +1 -1
  58. package/lib/store/RelayReferenceMarker.js +34 -22
  59. package/lib/store/RelayResponseNormalizer.js +172 -96
  60. package/lib/store/RelayStoreReactFlightUtils.js +5 -11
  61. package/lib/store/RelayStoreSubscriptions.js +15 -10
  62. package/lib/store/RelayStoreTypes.js +1 -1
  63. package/lib/store/RelayStoreUtils.js +13 -8
  64. package/lib/store/ResolverCache.js +213 -0
  65. package/lib/store/ResolverFragments.js +10 -6
  66. package/lib/store/StoreInspector.js +1 -1
  67. package/lib/store/TypeID.js +1 -1
  68. package/lib/store/ViewerPattern.js +1 -1
  69. package/lib/store/cloneRelayHandleSourceField.js +6 -5
  70. package/lib/store/cloneRelayScalarHandleSourceField.js +6 -5
  71. package/lib/store/createFragmentSpecResolver.js +1 -1
  72. package/lib/store/createRelayContext.js +5 -3
  73. package/lib/store/defaultGetDataID.js +1 -1
  74. package/lib/store/defaultRequiredFieldLogger.js +1 -1
  75. package/lib/store/hasOverlappingIDs.js +1 -1
  76. package/lib/store/isRelayModernEnvironment.js +1 -1
  77. package/lib/store/normalizeRelayPayload.js +1 -1
  78. package/lib/store/readInlineData.js +7 -3
  79. package/lib/subscription/requestSubscription.js +32 -34
  80. package/lib/util/JSResourceTypes.flow.js +1 -1
  81. package/lib/util/NormalizationNode.js +1 -1
  82. package/lib/util/ReaderNode.js +1 -1
  83. package/lib/util/RelayConcreteNode.js +3 -1
  84. package/lib/util/RelayDefaultHandleKey.js +1 -1
  85. package/lib/util/RelayError.js +1 -1
  86. package/lib/util/RelayFeatureFlags.js +10 -7
  87. package/lib/util/RelayProfiler.js +1 -1
  88. package/lib/util/RelayReplaySubject.js +22 -7
  89. package/lib/util/RelayRuntimeTypes.js +1 -7
  90. package/lib/util/StringInterner.js +71 -0
  91. package/lib/util/createPayloadFor3DField.js +1 -1
  92. package/lib/util/deepFreeze.js +1 -1
  93. package/lib/util/generateID.js +1 -1
  94. package/lib/util/getAllRootVariables.js +29 -0
  95. package/lib/util/getFragmentIdentifier.js +16 -8
  96. package/lib/util/getOperation.js +3 -2
  97. package/lib/util/getPaginationMetadata.js +41 -0
  98. package/lib/util/getPaginationVariables.js +66 -0
  99. package/lib/util/getPendingOperationsForFragment.js +55 -0
  100. package/lib/util/getRefetchMetadata.js +36 -0
  101. package/lib/util/getRelayHandleKey.js +3 -3
  102. package/lib/util/getRequestIdentifier.js +3 -3
  103. package/lib/util/getValueAtPath.js +51 -0
  104. package/lib/util/isEmptyObject.js +2 -2
  105. package/lib/util/isPromise.js +1 -1
  106. package/lib/util/isScalarAndEqual.js +1 -1
  107. package/lib/util/recycleNodesInto.js +1 -1
  108. package/lib/util/registerEnvironmentWithDevTools.js +26 -0
  109. package/lib/util/reportMissingRequiredFields.js +1 -1
  110. package/lib/util/resolveImmediate.js +1 -1
  111. package/lib/util/stableCopy.js +1 -1
  112. package/lib/util/withDuration.js +31 -0
  113. package/multi-actor-environment/ActorIdentifier.js.flow +18 -2
  114. package/multi-actor-environment/ActorSpecificEnvironment.js.flow +94 -58
  115. package/multi-actor-environment/ActorUtils.js.flow +33 -0
  116. package/multi-actor-environment/MultiActorEnvironment.js.flow +366 -93
  117. package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +88 -23
  118. package/multi-actor-environment/index.js.flow +3 -1
  119. package/mutations/RelayDeclarativeMutationConfig.js.flow +33 -27
  120. package/mutations/RelayRecordProxy.js.flow +5 -6
  121. package/mutations/RelayRecordSourceMutator.js.flow +5 -7
  122. package/mutations/RelayRecordSourceProxy.js.flow +20 -11
  123. package/mutations/RelayRecordSourceSelectorProxy.js.flow +23 -8
  124. package/mutations/applyOptimisticMutation.js.flow +14 -15
  125. package/mutations/commitLocalUpdate.js.flow +2 -2
  126. package/mutations/commitMutation.js.flow +36 -47
  127. package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +318 -0
  128. package/mutations/validateMutation.js.flow +27 -17
  129. package/network/ConvertToExecuteFunction.js.flow +3 -3
  130. package/network/RelayNetwork.js.flow +5 -6
  131. package/network/RelayNetworkTypes.js.flow +1 -1
  132. package/network/RelayObservable.js.flow +2 -2
  133. package/network/RelayQueryResponseCache.js.flow +35 -22
  134. package/network/wrapNetworkWithLogObserver.js.flow +99 -0
  135. package/package.json +2 -2
  136. package/query/GraphQLTag.js.flow +11 -11
  137. package/query/PreloadableQueryRegistry.js.flow +5 -3
  138. package/query/fetchQuery.js.flow +19 -19
  139. package/query/fetchQueryInternal.js.flow +7 -10
  140. package/query/fetchQuery_DEPRECATED.js.flow +7 -7
  141. package/relay-runtime.js +2 -2
  142. package/relay-runtime.min.js +2 -2
  143. package/store/ClientID.js.flow +15 -4
  144. package/store/DataChecker.js.flow +142 -60
  145. package/store/OperationExecutor.js.flow +575 -320
  146. package/store/RelayConcreteVariables.js.flow +28 -9
  147. package/store/RelayExperimentalGraphResponseHandler.js.flow +121 -0
  148. package/store/RelayExperimentalGraphResponseTransform.js.flow +470 -0
  149. package/store/RelayModernEnvironment.js.flow +91 -115
  150. package/store/RelayModernFragmentSpecResolver.js.flow +56 -32
  151. package/store/RelayModernOperationDescriptor.js.flow +13 -8
  152. package/store/RelayModernRecord.js.flow +68 -12
  153. package/store/RelayModernSelector.js.flow +25 -15
  154. package/store/RelayModernStore.js.flow +67 -32
  155. package/store/RelayOperationTracker.js.flow +60 -44
  156. package/store/RelayOptimisticRecordSource.js.flow +3 -3
  157. package/store/RelayPublishQueue.js.flow +74 -32
  158. package/store/RelayReader.js.flow +319 -100
  159. package/store/RelayRecordSource.js.flow +73 -7
  160. package/store/RelayRecordState.js.flow +1 -1
  161. package/store/RelayReferenceMarker.js.flow +41 -27
  162. package/store/RelayResponseNormalizer.js.flow +204 -86
  163. package/store/RelayStoreReactFlightUtils.js.flow +5 -12
  164. package/store/RelayStoreSubscriptions.js.flow +20 -12
  165. package/store/RelayStoreTypes.js.flow +200 -41
  166. package/store/RelayStoreUtils.js.flow +25 -12
  167. package/store/ResolverCache.js.flow +249 -0
  168. package/store/ResolverFragments.js.flow +16 -20
  169. package/store/StoreInspector.js.flow +3 -3
  170. package/store/TypeID.js.flow +2 -2
  171. package/store/ViewerPattern.js.flow +3 -3
  172. package/store/cloneRelayHandleSourceField.js.flow +6 -7
  173. package/store/cloneRelayScalarHandleSourceField.js.flow +6 -7
  174. package/store/createFragmentSpecResolver.js.flow +4 -5
  175. package/store/createRelayContext.js.flow +4 -4
  176. package/store/defaultGetDataID.js.flow +1 -1
  177. package/store/defaultRequiredFieldLogger.js.flow +1 -1
  178. package/store/hasOverlappingIDs.js.flow +1 -1
  179. package/store/isRelayModernEnvironment.js.flow +1 -1
  180. package/store/normalizeRelayPayload.js.flow +7 -8
  181. package/store/readInlineData.js.flow +8 -9
  182. package/subscription/requestSubscription.js.flow +55 -51
  183. package/util/JSResourceTypes.flow.js.flow +1 -1
  184. package/util/NormalizationNode.js.flow +11 -4
  185. package/util/ReaderNode.js.flow +25 -2
  186. package/util/RelayConcreteNode.js.flow +5 -1
  187. package/util/RelayDefaultHandleKey.js.flow +1 -1
  188. package/util/RelayError.js.flow +1 -1
  189. package/util/RelayFeatureFlags.js.flow +23 -15
  190. package/util/RelayProfiler.js.flow +1 -1
  191. package/util/RelayReplaySubject.js.flow +10 -10
  192. package/util/RelayRuntimeTypes.js.flow +70 -3
  193. package/util/StringInterner.js.flow +69 -0
  194. package/util/createPayloadFor3DField.js.flow +4 -4
  195. package/util/deepFreeze.js.flow +1 -1
  196. package/util/generateID.js.flow +1 -1
  197. package/util/getAllRootVariables.js.flow +36 -0
  198. package/util/getFragmentIdentifier.js.flow +28 -16
  199. package/util/getOperation.js.flow +3 -3
  200. package/util/getPaginationMetadata.js.flow +69 -0
  201. package/util/getPaginationVariables.js.flow +108 -0
  202. package/util/getPendingOperationsForFragment.js.flow +62 -0
  203. package/util/getRefetchMetadata.js.flow +76 -0
  204. package/util/getRelayHandleKey.js.flow +2 -3
  205. package/util/getRequestIdentifier.js.flow +4 -4
  206. package/util/getValueAtPath.js.flow +46 -0
  207. package/util/isEmptyObject.js.flow +2 -1
  208. package/util/isPromise.js.flow +1 -1
  209. package/util/isScalarAndEqual.js.flow +1 -1
  210. package/util/recycleNodesInto.js.flow +1 -1
  211. package/util/registerEnvironmentWithDevTools.js.flow +33 -0
  212. package/util/reportMissingRequiredFields.js.flow +1 -1
  213. package/util/resolveImmediate.js.flow +2 -2
  214. package/util/stableCopy.js.flow +1 -1
  215. package/util/withDuration.js.flow +32 -0
  216. package/lib/store/RelayRecordSourceMapImpl.js +0 -107
  217. package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
  218. package/store/RelayRecordSourceMapImpl.js.flow +0 -91
  219. package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -15,25 +15,31 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
15
15
 
16
16
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
17
17
 
18
- var OperationExecutor = require('./OperationExecutor');
19
-
20
18
  var RelayDefaultHandlerProvider = require('../handlers/RelayDefaultHandlerProvider');
21
19
 
22
- var RelayFeatureFlags = require('../util/RelayFeatureFlags');
20
+ var _require = require('../multi-actor-environment/ActorIdentifier'),
21
+ INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE = _require.INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE,
22
+ assertInternalActorIndentifier = _require.assertInternalActorIndentifier;
23
23
 
24
24
  var RelayObservable = require('../network/RelayObservable');
25
25
 
26
+ var wrapNetworkWithLogObserver = require('../network/wrapNetworkWithLogObserver');
27
+
26
28
  var RelayOperationTracker = require('../store/RelayOperationTracker');
27
29
 
28
- var RelayPublishQueue = require('./RelayPublishQueue');
30
+ var registerEnvironmentWithDevTools = require('../util/registerEnvironmentWithDevTools');
29
31
 
30
- var RelayRecordSource = require('./RelayRecordSource');
32
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
31
33
 
32
34
  var defaultGetDataID = require('./defaultGetDataID');
33
35
 
34
36
  var defaultRequiredFieldLogger = require('./defaultRequiredFieldLogger');
35
37
 
36
- var generateID = require('../util/generateID');
38
+ var OperationExecutor = require('./OperationExecutor');
39
+
40
+ var RelayPublishQueue = require('./RelayPublishQueue');
41
+
42
+ var RelayRecordSource = require('./RelayRecordSource');
37
43
 
38
44
  var invariant = require('invariant');
39
45
 
@@ -64,7 +70,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
64
70
  this._defaultRenderPolicy = ((_config$UNSTABLE_defa = config.UNSTABLE_defaultRenderPolicy) !== null && _config$UNSTABLE_defa !== void 0 ? _config$UNSTABLE_defa : RelayFeatureFlags.ENABLE_PARTIAL_RENDERING_DEFAULT === true) ? 'partial' : 'full';
65
71
  this._operationLoader = operationLoader;
66
72
  this._operationExecutions = new Map();
67
- this._network = this.__wrapNetworkWithLogObserver(config.network);
73
+ this._network = wrapNetworkWithLogObserver(this, config.network);
68
74
  this._getDataID = (_config$getDataID = config.getDataID) !== null && _config$getDataID !== void 0 ? _config$getDataID : defaultGetDataID;
69
75
  this._publishQueue = new RelayPublishQueue(config.store, (_config$handlerProvid = config.handlerProvider) !== null && _config$handlerProvid !== void 0 ? _config$handlerProvid : RelayDefaultHandlerProvider, this._getDataID);
70
76
  this._scheduler = (_config$scheduler = config.scheduler) !== null && _config$scheduler !== void 0 ? _config$scheduler : null;
@@ -73,33 +79,26 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
73
79
  this._isServer = (_config$isServer = config.isServer) !== null && _config$isServer !== void 0 ? _config$isServer : false;
74
80
 
75
81
  this.__setNet = function (newNet) {
76
- return _this._network = _this.__wrapNetworkWithLogObserver(newNet);
82
+ return _this._network = wrapNetworkWithLogObserver(_this, newNet);
77
83
  };
78
84
 
79
85
  if (process.env.NODE_ENV !== "production") {
80
- var _require = require('./StoreInspector'),
81
- inspect = _require.inspect;
86
+ var _require2 = require('./StoreInspector'),
87
+ inspect = _require2.inspect;
82
88
 
83
89
  this.DEBUG_inspect = function (dataID) {
84
90
  return inspect(_this, dataID);
85
91
  };
86
- } // Register this Relay Environment with Relay DevTools if it exists.
87
- // Note: this must always be the last step in the constructor.
88
-
89
-
90
- var _global = typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : undefined;
91
-
92
- var devToolsHook = _global && _global.__RELAY_DEVTOOLS_HOOK__;
93
-
94
- if (devToolsHook) {
95
- devToolsHook.registerEnvironment(this);
96
92
  }
97
93
 
98
94
  this._missingFieldHandlers = config.missingFieldHandlers;
99
95
  this._operationTracker = (_config$operationTrac = config.operationTracker) !== null && _config$operationTrac !== void 0 ? _config$operationTrac : new RelayOperationTracker();
100
96
  this._reactFlightPayloadDeserializer = reactFlightPayloadDeserializer;
101
97
  this._reactFlightServerErrorHandler = reactFlightServerErrorHandler;
102
- this._shouldProcessClientComponents = config.shouldProcessClientComponents;
98
+ this._shouldProcessClientComponents = config.shouldProcessClientComponents; // Register this Relay Environment with Relay DevTools if it exists.
99
+ // Note: this must always be the last step in the constructor.
100
+
101
+ registerEnvironmentWithDevTools(this);
103
102
  }
104
103
 
105
104
  var _proto = RelayModernEnvironment.prototype;
@@ -241,9 +240,19 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
241
240
 
242
241
  var target = RelayRecordSource.create();
243
242
 
243
+ var source = this._store.getSource();
244
+
244
245
  var result = this._store.check(operation, {
245
- target: target,
246
- handlers: handlers
246
+ handlers: handlers,
247
+ defaultActorIdentifier: INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE,
248
+ getSourceForActor: function getSourceForActor(actorIdentifier) {
249
+ assertInternalActorIndentifier(actorIdentifier);
250
+ return source;
251
+ },
252
+ getTargetForActor: function getTargetForActor(actorIdentifier) {
253
+ assertInternalActorIndentifier(actorIdentifier);
254
+ return target;
255
+ }
247
256
  });
248
257
 
249
258
  if (target.size() > 0) {
@@ -268,7 +277,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
268
277
  }
269
278
  /**
270
279
  * Returns an Observable of GraphQLResponse resulting from executing the
271
- * provided Query or Subscription operation, each result of which is then
280
+ * provided Query operation, each result of which is then
272
281
  * normalized and committed to the publish queue.
273
282
  *
274
283
  * Note: Observables are lazy, so calling this method will do nothing until
@@ -279,8 +288,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
279
288
  _proto.execute = function execute(_ref) {
280
289
  var _this7 = this;
281
290
 
282
- var operation = _ref.operation,
283
- updater = _ref.updater;
291
+ var operation = _ref.operation;
284
292
  return this._execute({
285
293
  createSource: function createSource() {
286
294
  return _this7._network.execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null);
@@ -288,6 +296,31 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
288
296
  isClientPayload: false,
289
297
  operation: operation,
290
298
  optimisticConfig: null,
299
+ updater: null
300
+ });
301
+ }
302
+ /**
303
+ * Returns an Observable of GraphQLResponse resulting from executing the
304
+ * provided Subscription operation, each result of which is then
305
+ * normalized and committed to the publish queue.
306
+ *
307
+ * Note: Observables are lazy, so calling this method will do nothing until
308
+ * the result is subscribed to: environment.execute({...}).subscribe({...}).
309
+ */
310
+ ;
311
+
312
+ _proto.executeSubscription = function executeSubscription(_ref2) {
313
+ var _this8 = this;
314
+
315
+ var operation = _ref2.operation,
316
+ updater = _ref2.updater;
317
+ return this._execute({
318
+ createSource: function createSource() {
319
+ return _this8._network.execute(operation.request.node.params, operation.request.variables, operation.request.cacheConfig || {}, null);
320
+ },
321
+ isClientPayload: false,
322
+ operation: operation,
323
+ optimisticConfig: null,
291
324
  updater: updater
292
325
  });
293
326
  }
@@ -303,14 +336,14 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
303
336
  */
304
337
  ;
305
338
 
306
- _proto.executeMutation = function executeMutation(_ref2) {
307
- var _this8 = this;
339
+ _proto.executeMutation = function executeMutation(_ref3) {
340
+ var _this9 = this;
308
341
 
309
- var operation = _ref2.operation,
310
- optimisticResponse = _ref2.optimisticResponse,
311
- optimisticUpdater = _ref2.optimisticUpdater,
312
- updater = _ref2.updater,
313
- uploadables = _ref2.uploadables;
342
+ var operation = _ref3.operation,
343
+ optimisticResponse = _ref3.optimisticResponse,
344
+ optimisticUpdater = _ref3.optimisticUpdater,
345
+ updater = _ref3.updater,
346
+ uploadables = _ref3.uploadables;
314
347
  var optimisticConfig;
315
348
 
316
349
  if (optimisticResponse || optimisticUpdater) {
@@ -323,7 +356,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
323
356
 
324
357
  return this._execute({
325
358
  createSource: function createSource() {
326
- return _this8._network.execute(operation.request.node.params, operation.request.variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, operation.request.cacheConfig), {}, {
359
+ return _this9._network.execute(operation.request.node.params, operation.request.variables, (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, operation.request.cacheConfig), {}, {
327
360
  force: true
328
361
  }), uploadables);
329
362
  },
@@ -336,7 +369,7 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
336
369
  /**
337
370
  * Returns an Observable of GraphQLResponse resulting from executing the
338
371
  * provided Query or Subscription operation responses, the result of which is
339
- * then normalized and comitted to the publish queue.
372
+ * then normalized and committed to the publish queue.
340
373
  *
341
374
  * Note: Observables are lazy, so calling this method will do nothing until
342
375
  * the result is subscribed to:
@@ -344,9 +377,9 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
344
377
  */
345
378
  ;
346
379
 
347
- _proto.executeWithSource = function executeWithSource(_ref3) {
348
- var operation = _ref3.operation,
349
- source = _ref3.source;
380
+ _proto.executeWithSource = function executeWithSource(_ref4) {
381
+ var operation = _ref4.operation,
382
+ source = _ref4.source;
350
383
  return this._execute({
351
384
  createSource: function createSource() {
352
385
  return source;
@@ -364,103 +397,50 @@ var RelayModernEnvironment = /*#__PURE__*/function () {
364
397
  return "RelayModernEnvironment(".concat((_this$configName = this.configName) !== null && _this$configName !== void 0 ? _this$configName : '', ")");
365
398
  };
366
399
 
367
- _proto._execute = function _execute(_ref4) {
368
- var _this9 = this;
400
+ _proto._execute = function _execute(_ref5) {
401
+ var _this10 = this;
369
402
 
370
- var createSource = _ref4.createSource,
371
- isClientPayload = _ref4.isClientPayload,
372
- operation = _ref4.operation,
373
- optimisticConfig = _ref4.optimisticConfig,
374
- updater = _ref4.updater;
403
+ var createSource = _ref5.createSource,
404
+ isClientPayload = _ref5.isClientPayload,
405
+ operation = _ref5.operation,
406
+ optimisticConfig = _ref5.optimisticConfig,
407
+ updater = _ref5.updater;
408
+ var publishQueue = this._publishQueue;
409
+ var store = this._store;
375
410
  return RelayObservable.create(function (sink) {
376
411
  var executor = OperationExecutor.execute({
377
- getDataID: _this9._getDataID,
412
+ actorIdentifier: INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE,
413
+ getDataID: _this10._getDataID,
378
414
  isClientPayload: isClientPayload,
415
+ log: _this10.__log,
379
416
  operation: operation,
380
- operationExecutions: _this9._operationExecutions,
381
- operationLoader: _this9._operationLoader,
382
- operationTracker: _this9._operationTracker,
417
+ operationExecutions: _this10._operationExecutions,
418
+ operationLoader: _this10._operationLoader,
419
+ operationTracker: _this10._operationTracker,
383
420
  optimisticConfig: optimisticConfig,
384
- publishQueue: _this9._publishQueue,
385
- reactFlightPayloadDeserializer: _this9._reactFlightPayloadDeserializer,
386
- reactFlightServerErrorHandler: _this9._reactFlightServerErrorHandler,
387
- scheduler: _this9._scheduler,
388
- shouldProcessClientComponents: _this9._shouldProcessClientComponents,
421
+ getPublishQueue: function getPublishQueue(actorIdentifier) {
422
+ assertInternalActorIndentifier(actorIdentifier);
423
+ return publishQueue;
424
+ },
425
+ reactFlightPayloadDeserializer: _this10._reactFlightPayloadDeserializer,
426
+ reactFlightServerErrorHandler: _this10._reactFlightServerErrorHandler,
427
+ scheduler: _this10._scheduler,
428
+ shouldProcessClientComponents: _this10._shouldProcessClientComponents,
389
429
  sink: sink,
390
430
  // NOTE: Some product tests expect `Network.execute` to be called only
391
431
  // when the Observable is executed.
392
432
  source: createSource(),
393
- store: _this9._store,
394
- treatMissingFieldsAsNull: _this9._treatMissingFieldsAsNull,
433
+ getStore: function getStore(actorIdentifier) {
434
+ assertInternalActorIndentifier(actorIdentifier);
435
+ return store;
436
+ },
437
+ treatMissingFieldsAsNull: _this10._treatMissingFieldsAsNull,
395
438
  updater: updater
396
439
  });
397
440
  return function () {
398
441
  return executor.cancel();
399
442
  };
400
443
  });
401
- }
402
- /**
403
- * Wraps the network with logging to ensure that network requests are
404
- * always logged. Relying on each network callsite to be wrapped is
405
- * untenable and will eventually lead to holes in the logging.
406
- */
407
- ;
408
-
409
- _proto.__wrapNetworkWithLogObserver = function __wrapNetworkWithLogObserver(network) {
410
- var that = this;
411
- return {
412
- execute: function execute(params, variables, cacheConfig, uploadables) {
413
- var transactionID = generateID();
414
- var log = that.__log;
415
- var logObserver = {
416
- start: function start(subscription) {
417
- log({
418
- name: 'network.start',
419
- transactionID: transactionID,
420
- params: params,
421
- variables: variables,
422
- cacheConfig: cacheConfig
423
- });
424
- },
425
- next: function next(response) {
426
- log({
427
- name: 'network.next',
428
- transactionID: transactionID,
429
- response: response
430
- });
431
- },
432
- error: function error(_error) {
433
- log({
434
- name: 'network.error',
435
- transactionID: transactionID,
436
- error: _error
437
- });
438
- },
439
- complete: function complete() {
440
- log({
441
- name: 'network.complete',
442
- transactionID: transactionID
443
- });
444
- },
445
- unsubscribe: function unsubscribe() {
446
- log({
447
- name: 'network.unsubscribe',
448
- transactionID: transactionID
449
- });
450
- }
451
- };
452
-
453
- var logRequestInfo = function logRequestInfo(info) {
454
- log({
455
- name: 'network.info',
456
- transactionID: transactionID,
457
- info: info
458
- });
459
- };
460
-
461
- return network.execute(params, variables, cacheConfig, uploadables, logRequestInfo)["do"](logObserver);
462
- }
463
- };
464
444
  };
465
445
 
466
446
  return RelayModernEnvironment;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -16,28 +16,29 @@ var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/obje
16
16
 
17
17
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
18
18
 
19
- var RelayFeatureFlags = require('../util/RelayFeatureFlags');
19
+ var getPendingOperationsForFragment = require('../util/getPendingOperationsForFragment');
20
20
 
21
- var areEqual = require("fbjs/lib/areEqual");
21
+ var isScalarAndEqual = require('../util/isScalarAndEqual');
22
22
 
23
- var invariant = require('invariant');
23
+ var recycleNodesInto = require('../util/recycleNodesInto');
24
24
 
25
- var isScalarAndEqual = require('../util/isScalarAndEqual');
25
+ var RelayFeatureFlags = require('../util/RelayFeatureFlags');
26
26
 
27
27
  var reportMissingRequiredFields = require('../util/reportMissingRequiredFields');
28
28
 
29
- var warning = require("fbjs/lib/warning");
29
+ var _require = require('./RelayModernOperationDescriptor'),
30
+ createRequestDescriptor = _require.createRequestDescriptor;
30
31
 
31
- var _require = require('../query/fetchQueryInternal'),
32
- getPromiseForActiveRequest = _require.getPromiseForActiveRequest;
32
+ var _require2 = require('./RelayModernSelector'),
33
+ areEqualSelectors = _require2.areEqualSelectors,
34
+ createReaderSelector = _require2.createReaderSelector,
35
+ getSelectorsFromObject = _require2.getSelectorsFromObject;
33
36
 
34
- var _require2 = require('./RelayModernOperationDescriptor'),
35
- createRequestDescriptor = _require2.createRequestDescriptor;
37
+ var areEqual = require("fbjs/lib/areEqual");
36
38
 
37
- var _require3 = require('./RelayModernSelector'),
38
- areEqualSelectors = _require3.areEqualSelectors,
39
- createReaderSelector = _require3.createReaderSelector,
40
- getSelectorsFromObject = _require3.getSelectorsFromObject;
39
+ var invariant = require('invariant');
40
+
41
+ var warning = require("fbjs/lib/warning");
41
42
 
42
43
  /**
43
44
  * A utility for resolving and subscribing to the results of a fragment spec
@@ -129,13 +130,17 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
129
130
  return this._data;
130
131
  };
131
132
 
132
- _proto.setCallback = function setCallback(callback) {
133
+ _proto.setCallback = function setCallback(props, callback) {
133
134
  this._callback = callback;
135
+
136
+ if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
137
+ this.setProps(props);
138
+ }
134
139
  };
135
140
 
136
141
  _proto.setProps = function setProps(props) {
137
- var ownedSelectors = getSelectorsFromObject(this._fragments, props);
138
142
  this._props = {};
143
+ var ownedSelectors = getSelectorsFromObject(this._fragments, props);
139
144
 
140
145
  for (var _key3 in ownedSelectors) {
141
146
  if (ownedSelectors.hasOwnProperty(_key3)) {
@@ -150,14 +155,14 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
150
155
  resolver = null;
151
156
  } else if (ownedSelector.kind === 'PluralReaderSelector') {
152
157
  if (resolver == null) {
153
- resolver = new SelectorListResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._onChange);
158
+ resolver = new SelectorListResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._callback != null, this._onChange);
154
159
  } else {
155
160
  !(resolver instanceof SelectorListResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an array.', _key3) : invariant(false) : void 0;
156
161
  resolver.setSelector(ownedSelector);
157
162
  }
158
163
  } else {
159
164
  if (resolver == null) {
160
- resolver = new SelectorResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._onChange);
165
+ resolver = new SelectorResolver(this._context.environment, this._rootIsQueryRenderer, ownedSelector, this._callback != null, this._onChange);
161
166
  } else {
162
167
  !(resolver instanceof SelectorResolver) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernFragmentSpecResolver: Expected prop `%s` to always be an object.', _key3) : invariant(false) : void 0;
163
168
  resolver.setSelector(ownedSelector);
@@ -194,7 +199,7 @@ var RelayModernFragmentSpecResolver = /*#__PURE__*/function () {
194
199
 
195
200
 
196
201
  var SelectorResolver = /*#__PURE__*/function () {
197
- function SelectorResolver(environment, rootIsQueryRenderer, selector, callback) {
202
+ function SelectorResolver(environment, rootIsQueryRenderer, selector, subscribeOnConstruction, callback) {
198
203
  var _this2 = this;
199
204
 
200
205
  (0, _defineProperty2["default"])(this, "_onChange", function (snapshot) {
@@ -214,7 +219,14 @@ var SelectorResolver = /*#__PURE__*/function () {
214
219
  this._environment = environment;
215
220
  this._rootIsQueryRenderer = rootIsQueryRenderer;
216
221
  this._selector = selector;
217
- this._subscription = environment.subscribe(_snapshot, this._onChange);
222
+
223
+ if (RelayFeatureFlags.ENABLE_CONTAINERS_SUBSCRIBE_ON_COMMIT === true) {
224
+ if (subscribeOnConstruction) {
225
+ this._subscription = environment.subscribe(_snapshot, this._onChange);
226
+ }
227
+ } else {
228
+ this._subscription = environment.subscribe(_snapshot, this._onChange);
229
+ }
218
230
  }
219
231
 
220
232
  var _proto2 = SelectorResolver.prototype;
@@ -228,9 +240,7 @@ var SelectorResolver = /*#__PURE__*/function () {
228
240
  };
229
241
 
230
242
  _proto2.resolve = function resolve() {
231
- if (RelayFeatureFlags.ENABLE_RELAY_CONTAINERS_SUSPENSE === true && this._isMissingData === true) {
232
- var _getPromiseForActiveR;
233
-
243
+ if (this._isMissingData === true) {
234
244
  // NOTE: This branch exists to handle the case in which:
235
245
  // - A RelayModern container is rendered as a descendant of a Relay Hook
236
246
  // root using a "partial" renderPolicy (this means that eargerly
@@ -252,13 +262,28 @@ var SelectorResolver = /*#__PURE__*/function () {
252
262
  // This should eventually go away with something like @optional, where we only
253
263
  // suspend at specific boundaries depending on whether the boundary
254
264
  // can be fulfilled or not.
255
- var promise = (_getPromiseForActiveR = getPromiseForActiveRequest(this._environment, this._selector.owner)) !== null && _getPromiseForActiveR !== void 0 ? _getPromiseForActiveR : this._environment.getOperationTracker().getPromiseForPendingOperationsAffectingOwner(this._selector.owner);
265
+ var pendingOperationsResult = getPendingOperationsForFragment(this._environment, this._selector.node, this._selector.owner);
266
+ var promise = pendingOperationsResult === null || pendingOperationsResult === void 0 ? void 0 : pendingOperationsResult.promise;
256
267
 
257
268
  if (promise != null) {
258
269
  if (this._rootIsQueryRenderer) {
259
270
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Relay Container for fragment `%s` has missing data and ' + 'would suspend. When using features such as @defer or @module, ' + 'use `useFragment` instead of a Relay Container.', this._selector.node.name) : void 0;
260
271
  } else {
272
+ var _pendingOperationsRes;
273
+
274
+ var pendingOperations = (_pendingOperationsRes = pendingOperationsResult === null || pendingOperationsResult === void 0 ? void 0 : pendingOperationsResult.pendingOperations) !== null && _pendingOperationsRes !== void 0 ? _pendingOperationsRes : [];
261
275
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Relay Container for fragment `%s` suspended. When using ' + 'features such as @defer or @module, use `useFragment` instead ' + 'of a Relay Container.', this._selector.node.name) : void 0;
276
+
277
+ this._environment.__log({
278
+ name: 'suspense.fragment',
279
+ data: this._data,
280
+ fragment: this._selector.node,
281
+ isRelayHooks: false,
282
+ isMissingData: this._isMissingData,
283
+ isPromiseCached: false,
284
+ pendingOperations: pendingOperations
285
+ });
286
+
262
287
  throw promise;
263
288
  }
264
289
  }
@@ -280,7 +305,7 @@ var SelectorResolver = /*#__PURE__*/function () {
280
305
 
281
306
  var snapshot = this._environment.lookup(selector);
282
307
 
283
- this._data = snapshot.data;
308
+ this._data = recycleNodesInto(this._data, snapshot.data);
284
309
  this._isMissingData = snapshot.isMissingData;
285
310
  this._missingRequiredFields = snapshot.missingRequiredFields;
286
311
  this._selector = selector;
@@ -319,7 +344,7 @@ var SelectorResolver = /*#__PURE__*/function () {
319
344
 
320
345
 
321
346
  var SelectorListResolver = /*#__PURE__*/function () {
322
- function SelectorListResolver(environment, rootIsQueryRenderer, selector, callback) {
347
+ function SelectorListResolver(environment, rootIsQueryRenderer, selector, subscribeOnConstruction, callback) {
323
348
  var _this3 = this;
324
349
 
325
350
  (0, _defineProperty2["default"])(this, "_onChange", function (data) {
@@ -333,6 +358,7 @@ var SelectorListResolver = /*#__PURE__*/function () {
333
358
  this._resolvers = [];
334
359
  this._stale = true;
335
360
  this._rootIsQueryRenderer = rootIsQueryRenderer;
361
+ this._subscribeOnConstruction = subscribeOnConstruction;
336
362
  this.setSelector(selector);
337
363
  }
338
364
 
@@ -384,7 +410,7 @@ var SelectorListResolver = /*#__PURE__*/function () {
384
410
  if (ii < this._resolvers.length) {
385
411
  this._resolvers[ii].setSelector(selectors[ii]);
386
412
  } else {
387
- this._resolvers[ii] = new SelectorResolver(this._environment, this._rootIsQueryRenderer, selectors[ii], this._onChange);
413
+ this._resolvers[ii] = new SelectorResolver(this._environment, this._rootIsQueryRenderer, selectors[ii], this._subscribeOnConstruction, this._onChange);
388
414
  }
389
415
  }
390
416
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -23,13 +23,14 @@ var _require2 = require('./RelayModernSelector'),
23
23
 
24
24
  var _require3 = require('./RelayStoreUtils'),
25
25
  ROOT_ID = _require3.ROOT_ID;
26
-
27
26
  /**
28
27
  * Creates an instance of the `OperationDescriptor` type defined in
29
28
  * `RelayStoreTypes` given an operation and some variables. The input variables
30
29
  * are filtered to exclude variables that do not match defined arguments on the
31
30
  * operation, and default values are populated for null values.
32
31
  */
32
+
33
+
33
34
  function createOperationDescriptor(request, variables, cacheConfig) {
34
35
  var dataID = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ROOT_ID;
35
36
  var operation = request.operation;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Copyright (c) Facebook, Inc. and its affiliates.
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
3
  *
4
4
  * This source code is licensed under the MIT license found in the
5
5
  * LICENSE file in the root directory of this source tree.
@@ -14,25 +14,25 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
16
 
17
- var areEqual = require("fbjs/lib/areEqual");
18
-
19
17
  var deepFreeze = require('../util/deepFreeze');
20
18
 
21
- var invariant = require('invariant');
22
-
23
- var warning = require("fbjs/lib/warning");
24
-
25
19
  var _require = require('./ClientID'),
26
20
  isClientID = _require.isClientID;
27
21
 
28
22
  var _require2 = require('./RelayStoreUtils'),
23
+ ACTOR_IDENTIFIER_KEY = _require2.ACTOR_IDENTIFIER_KEY,
29
24
  ID_KEY = _require2.ID_KEY,
25
+ INVALIDATED_AT_KEY = _require2.INVALIDATED_AT_KEY,
30
26
  REF_KEY = _require2.REF_KEY,
31
27
  REFS_KEY = _require2.REFS_KEY,
32
- TYPENAME_KEY = _require2.TYPENAME_KEY,
33
- INVALIDATED_AT_KEY = _require2.INVALIDATED_AT_KEY,
34
- ROOT_ID = _require2.ROOT_ID;
28
+ ROOT_ID = _require2.ROOT_ID,
29
+ TYPENAME_KEY = _require2.TYPENAME_KEY;
30
+
31
+ var areEqual = require("fbjs/lib/areEqual");
35
32
 
33
+ var invariant = require('invariant');
34
+
35
+ var warning = require("fbjs/lib/warning");
36
36
  /**
37
37
  * @public
38
38
  *
@@ -82,6 +82,8 @@ var _require2 = require('./RelayStoreUtils'),
82
82
  *
83
83
  * Clone a record.
84
84
  */
85
+
86
+
85
87
  function clone(record) {
86
88
  return (0, _objectSpread2["default"])({}, record);
87
89
  }
@@ -171,7 +173,7 @@ function getLinkedRecordID(record, storageKey) {
171
173
  return link;
172
174
  }
173
175
 
174
- !(typeof link === 'object' && link && typeof link[REF_KEY] === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordID(): Expected `%s.%s` to be a linked ID, ' + 'was `%s`.', record[ID_KEY], storageKey, JSON.stringify(link)) : invariant(false) : void 0;
176
+ !(typeof link === 'object' && link && typeof link[REF_KEY] === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordID(): Expected `%s.%s` to be a linked ID, ' + 'was `%s`.%s', record[ID_KEY], storageKey, JSON.stringify(link), typeof link === 'object' && link[REFS_KEY] !== undefined ? ' It appears to be a plural linked record: did you mean to call ' + 'getLinkedRecords() instead of getLinkedRecord()?' : '') : invariant(false) : void 0;
175
177
  return link[REF_KEY];
176
178
  }
177
179
  /**
@@ -189,7 +191,7 @@ function getLinkedRecordIDs(record, storageKey) {
189
191
  return links;
190
192
  }
191
193
 
192
- !(typeof links === 'object' && Array.isArray(links[REFS_KEY])) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordIDs(): Expected `%s.%s` to contain an array ' + 'of linked IDs, got `%s`.', record[ID_KEY], storageKey, JSON.stringify(links)) : invariant(false) : void 0; // assume items of the array are ids
194
+ !(typeof links === 'object' && Array.isArray(links[REFS_KEY])) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getLinkedRecordIDs(): Expected `%s.%s` to contain an array ' + 'of linked IDs, got `%s`.%s', record[ID_KEY], storageKey, JSON.stringify(links), typeof links === 'object' && links[REF_KEY] !== undefined ? ' It appears to be a singular linked record: did you mean to call ' + 'getLinkedRecord() instead of getLinkedRecords()?' : '') : invariant(false) : void 0; // assume items of the array are ids
193
195
 
194
196
  return links[REFS_KEY];
195
197
  }
@@ -336,6 +338,37 @@ function setLinkedRecordIDs(record, storageKey, linkedIDs) {
336
338
  links[REFS_KEY] = linkedIDs;
337
339
  record[storageKey] = links;
338
340
  }
341
+ /**
342
+ * @public
343
+ *
344
+ * Set the value of a field to a reference to another record in the actor specific store.
345
+ */
346
+
347
+
348
+ function setActorLinkedRecordID(record, storageKey, actorIdentifier, linkedID) {
349
+ // See perf note above for why we aren't using computed property access.
350
+ var link = {};
351
+ link[REF_KEY] = linkedID;
352
+ link[ACTOR_IDENTIFIER_KEY] = actorIdentifier;
353
+ record[storageKey] = link;
354
+ }
355
+ /**
356
+ * @public
357
+ *
358
+ * Get link to a record and the actor identifier for the store.
359
+ */
360
+
361
+
362
+ function getActorLinkedRecordID(record, storageKey) {
363
+ var link = record[storageKey];
364
+
365
+ if (link == null) {
366
+ return link;
367
+ }
368
+
369
+ !(typeof link === 'object' && typeof link[REF_KEY] === 'string' && link[ACTOR_IDENTIFIER_KEY] != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayModernRecord.getActorLinkedRecordID(): Expected `%s.%s` to be an actor specific linked ID, ' + 'was `%s`.', record[ID_KEY], storageKey, JSON.stringify(link)) : invariant(false) : void 0;
370
+ return [link[ACTOR_IDENTIFIER_KEY], link[REF_KEY]];
371
+ }
339
372
 
340
373
  module.exports = {
341
374
  clone: clone,
@@ -352,5 +385,7 @@ module.exports = {
352
385
  setValue: setValue,
353
386
  setLinkedRecordID: setLinkedRecordID,
354
387
  setLinkedRecordIDs: setLinkedRecordIDs,
355
- update: update
388
+ update: update,
389
+ getActorLinkedRecordID: getActorLinkedRecordID,
390
+ setActorLinkedRecordID: setActorLinkedRecordID
356
391
  };