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.
@@ -10,12 +10,14 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var invariant = require('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
 
@@ -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.
@@ -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('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.
@@ -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.
@@ -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 _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
16
16
 
17
- var RelayDeclarativeMutationConfig = require('./RelayDeclarativeMutationConfig');
18
-
19
- var invariant = require('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;
@@ -0,0 +1,242 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and 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
+ * @emails oncall+relay
9
+ * @format
10
+ */
11
+ // flowlint ambiguous-object-type:error
12
+ 'use strict';
13
+
14
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
15
+
16
+ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
17
+
18
+ var _require = require('../query/GraphQLTag'),
19
+ getRequest = _require.getRequest;
20
+
21
+ var _require2 = require('../store/RelayStoreUtils'),
22
+ getArgumentValues = _require2.getArgumentValues;
23
+
24
+ var nonUpdatableKeys = ['id', '__id', '__typename'];
25
+
26
+ function readUpdatableQuery_EXPERIMENTAL(query, variables, proxy) {
27
+ // TODO assert that the concrete request is an updatable query
28
+ var request = getRequest(query);
29
+ var updatableProxy = {};
30
+ updateProxyFromSelections(updatableProxy, proxy.getRoot(), variables, request.fragment.selections, proxy);
31
+
32
+ if (process.env.NODE_ENV !== "production") {
33
+ Object.freeze(updatableProxy);
34
+ }
35
+
36
+ return updatableProxy;
37
+ }
38
+
39
+ function updateProxyFromSelections(mutableUpdatableProxy, recordProxy, queryVariables, selections, root) {
40
+ var _selection$alias, _selection$alias2;
41
+
42
+ var _iterator = (0, _createForOfIteratorHelper2["default"])(selections),
43
+ _step;
44
+
45
+ try {
46
+ var _loop = function _loop() {
47
+ var selection = _step.value;
48
+
49
+ switch (selection.kind) {
50
+ case 'LinkedField':
51
+ // Linked fields are assignable if they contain fragment spreads or
52
+ // read-only otherwise.
53
+ var isAssignable = selection.selections.some(function (item) {
54
+ return item.kind === 'FragmentSpread';
55
+ });
56
+ var set = !isAssignable ? undefined : selection.plural ? createSetterForPluralLinkedField(selection, queryVariables, recordProxy, root) : createSetterForSingularLinkedField(selection, queryVariables, recordProxy, root);
57
+ var get = selection.plural ? createGetterForPluralLinkedField(selection, queryVariables, recordProxy, root) : createGetterForSingularLinkedField(selection, queryVariables, recordProxy, root);
58
+ Object.defineProperty(mutableUpdatableProxy, (_selection$alias = selection.alias) !== null && _selection$alias !== void 0 ? _selection$alias : selection.name, {
59
+ get: get,
60
+ set: set
61
+ });
62
+ break;
63
+
64
+ case 'ScalarField':
65
+ var scalarFieldName = (_selection$alias2 = selection.alias) !== null && _selection$alias2 !== void 0 ? _selection$alias2 : selection.name;
66
+ Object.defineProperty(mutableUpdatableProxy, scalarFieldName, {
67
+ get: function get() {
68
+ var _selection$args;
69
+
70
+ var variables = getArgumentValues((_selection$args = selection.args) !== null && _selection$args !== void 0 ? _selection$args : [], queryVariables); // Flow incorrect assumes that the return value for the get method must match
71
+ // the set parameter.
72
+
73
+ return recordProxy.getValue(selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
74
+ variables // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
75
+ );
76
+ },
77
+ set: nonUpdatableKeys.includes(selection.name) ? undefined : // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
78
+ function (newValue) {
79
+ var _selection$args2;
80
+
81
+ var variables = getArgumentValues((_selection$args2 = selection.args) !== null && _selection$args2 !== void 0 ? _selection$args2 : [], queryVariables);
82
+ recordProxy.setValue(newValue, selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
83
+ variables);
84
+ }
85
+ });
86
+ break;
87
+
88
+ case 'InlineFragment':
89
+ if (recordProxy.getType() === selection.type) {
90
+ updateProxyFromSelections(mutableUpdatableProxy, recordProxy, queryVariables, selection.selections, root);
91
+ }
92
+
93
+ break;
94
+
95
+ case 'ClientExtension':
96
+ updateProxyFromSelections(mutableUpdatableProxy, recordProxy, queryVariables, selection.selections, root);
97
+ break;
98
+
99
+ case 'FragmentSpread':
100
+ // Explicitly ignore
101
+ break;
102
+
103
+ default:
104
+ throw new Error('Encountered an unexpected ReaderSelection variant in RelayRecordSourceProxy. This indicates a bug in Relay.');
105
+ }
106
+ };
107
+
108
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
109
+ _loop();
110
+ }
111
+ } catch (err) {
112
+ _iterator.e(err);
113
+ } finally {
114
+ _iterator.f();
115
+ }
116
+ }
117
+
118
+ function createSetterForPluralLinkedField(selection, queryVariables, recordProxy, root) {
119
+ return function set(newValue) {
120
+ var _selection$args3;
121
+
122
+ var variables = getArgumentValues((_selection$args3 = selection.args) !== null && _selection$args3 !== void 0 ? _selection$args3 : [], queryVariables);
123
+
124
+ if (newValue == null) {
125
+ // $FlowFixMe[unclear-type] No good way to type these variables
126
+ recordProxy.setValue(null, selection.name, variables);
127
+ } else {
128
+ var recordProxies = newValue.map(function (item) {
129
+ if (item == null) {
130
+ throw new Error('When assigning an array of items, none of the items should be null or undefined.');
131
+ }
132
+
133
+ var __id = item.__id;
134
+
135
+ if (__id == null) {
136
+ throw new Error('The __id field must be present on each item passed to the setter. This indicates a bug in Relay.');
137
+ }
138
+
139
+ var newValueRecord = root.get(__id);
140
+
141
+ if (newValueRecord == null) {
142
+ throw new Error("Did not find item with data id ".concat(__id, " in the store."));
143
+ }
144
+
145
+ return newValueRecord;
146
+ });
147
+ recordProxy.setLinkedRecords(recordProxies, selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
148
+ variables);
149
+ }
150
+ };
151
+ }
152
+
153
+ function createSetterForSingularLinkedField(selection, queryVariables, recordProxy, root) {
154
+ return function set(newValue) {
155
+ var _selection$args4;
156
+
157
+ var variables = getArgumentValues((_selection$args4 = selection.args) !== null && _selection$args4 !== void 0 ? _selection$args4 : [], queryVariables);
158
+
159
+ if (newValue == null) {
160
+ // $FlowFixMe[unclear-type] No good way to type these variables
161
+ recordProxy.setValue(null, selection.name, variables);
162
+ } else {
163
+ var __id = newValue.__id;
164
+
165
+ if (__id == null) {
166
+ throw new Error('The __id field must be present on the argument. This indicates a bug in Relay.');
167
+ }
168
+
169
+ var newValueRecord = root.get(__id);
170
+
171
+ if (newValueRecord == null) {
172
+ throw new Error("Did not find item with data id ".concat(__id, " in the store."));
173
+ }
174
+
175
+ recordProxy.setLinkedRecord(newValueRecord, selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
176
+ variables);
177
+ }
178
+ };
179
+ }
180
+
181
+ function createGetterForPluralLinkedField(selection, queryVariables, recordProxy, root) {
182
+ return function () {
183
+ var _selection$args5;
184
+
185
+ var variables = getArgumentValues((_selection$args5 = selection.args) !== null && _selection$args5 !== void 0 ? _selection$args5 : [], queryVariables);
186
+ var linkedRecords = recordProxy.getLinkedRecords(selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
187
+ variables);
188
+
189
+ if (linkedRecords != null) {
190
+ return linkedRecords.map(function (linkedRecord) {
191
+ if (linkedRecord != null) {
192
+ var updatableProxy = {};
193
+ updateProxyFromSelections(updatableProxy, linkedRecord, queryVariables, selection.selections, root);
194
+
195
+ if (process.env.NODE_ENV !== "production") {
196
+ Object.freeze(updatableProxy);
197
+ } // Flow incorrect assumes that the return value for the get method must match
198
+ // the set parameter.
199
+ // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
200
+
201
+
202
+ return updatableProxy;
203
+ } else {
204
+ return linkedRecord;
205
+ } // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
206
+
207
+ });
208
+ } else {
209
+ return linkedRecords;
210
+ }
211
+ };
212
+ }
213
+
214
+ function createGetterForSingularLinkedField(selection, queryVariables, recordProxy, root) {
215
+ return function () {
216
+ var _selection$args6;
217
+
218
+ var variables = getArgumentValues((_selection$args6 = selection.args) !== null && _selection$args6 !== void 0 ? _selection$args6 : [], queryVariables);
219
+ var linkedRecord = recordProxy.getLinkedRecord(selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
220
+ variables);
221
+
222
+ if (linkedRecord != null) {
223
+ var updatableProxy = {};
224
+ updateProxyFromSelections(updatableProxy, linkedRecord, queryVariables, selection.selections, root);
225
+
226
+ if (process.env.NODE_ENV !== "production") {
227
+ Object.freeze(updatableProxy);
228
+ } // Flow incorrect assumes that the return value for the get method must match
229
+ // the set parameter.
230
+ // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
231
+
232
+
233
+ return updatableProxy;
234
+ } else {
235
+ return linkedRecord;
236
+ }
237
+ };
238
+ }
239
+
240
+ module.exports = {
241
+ readUpdatableQuery_EXPERIMENTAL: readUpdatableQuery_EXPERIMENTAL
242
+ };
@@ -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,14 +14,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
16
 
17
- var warning = require("fbjs/lib/warning");
18
-
19
- var hasOwnProperty = Object.prototype.hasOwnProperty;
20
-
21
17
  var _require = require('../util/RelayConcreteNode'),
22
- CONDITION = _require.CONDITION,
18
+ ACTOR_CHANGE = _require.ACTOR_CHANGE,
23
19
  CLIENT_COMPONENT = _require.CLIENT_COMPONENT,
24
20
  CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
21
+ CONDITION = _require.CONDITION,
25
22
  DEFER = _require.DEFER,
26
23
  FLIGHT_FIELD = _require.FLIGHT_FIELD,
27
24
  FRAGMENT_SPREAD = _require.FRAGMENT_SPREAD,
@@ -34,6 +31,11 @@ var _require = require('../util/RelayConcreteNode'),
34
31
  STREAM = _require.STREAM,
35
32
  TYPE_DISCRIMINATOR = _require.TYPE_DISCRIMINATOR;
36
33
 
34
+ var warning = require("fbjs/lib/warning");
35
+
36
+ // $FlowFixMe[method-unbinding] added when improving typing for this parameters
37
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
38
+
37
39
  var validateMutation = function validateMutation() {};
38
40
 
39
41
  if (process.env.NODE_ENV !== "production") {
@@ -90,6 +92,9 @@ if (process.env.NODE_ENV !== "production") {
90
92
  case FLIGHT_FIELD:
91
93
  return validateField(optimisticResponse, selection, context);
92
94
 
95
+ case ACTOR_CHANGE:
96
+ return validateField(optimisticResponse, selection.linkedField, context);
97
+
93
98
  case INLINE_FRAGMENT:
94
99
  var type = selection.type;
95
100
  var isConcreteType = selection.abstractKey == null;
@@ -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.
@@ -11,10 +11,11 @@
11
11
  'use strict';
12
12
 
13
13
  var RelayObservable = require('./RelayObservable');
14
-
15
14
  /**
16
15
  * Converts a FetchFunction into an ExecuteFunction for use by RelayNetwork.
17
16
  */
17
+
18
+
18
19
  function convertFetch(fn) {
19
20
  return function fetch(request, variables, cacheConfig, uploadables, logRequestInfo) {
20
21
  var result = fn(request, variables, cacheConfig, uploadables, logRequestInfo); // Note: We allow FetchFunction to directly return Error to indicate
@@ -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.
@@ -10,15 +10,16 @@
10
10
  // flowlint ambiguous-object-type:error
11
11
  'use strict';
12
12
 
13
- var invariant = require('invariant');
14
-
15
13
  var _require = require('./ConvertToExecuteFunction'),
16
14
  convertFetch = _require.convertFetch;
17
15
 
16
+ var invariant = require('invariant');
18
17
  /**
19
18
  * Creates an implementation of the `Network` interface defined in
20
19
  * `RelayNetworkTypes` given `fetch` and `subscribe` functions.
21
20
  */
21
+
22
+
22
23
  function create(fetchFn, subscribe) {
23
24
  // Convert to functions that returns RelayObservable.
24
25
  var observeFetch = convertFetch(fetchFn);
@@ -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.
@@ -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.
@@ -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,10 +14,10 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
14
14
 
15
15
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
16
16
 
17
- var invariant = require('invariant');
18
-
19
17
  var stableCopy = require('../util/stableCopy');
20
18
 
19
+ var invariant = require('invariant');
20
+
21
21
  /**
22
22
  * A cache for storing query responses, featuring:
23
23
  * - `get` with TTL
@@ -53,12 +53,28 @@ var RelayQueryResponseCache = /*#__PURE__*/function () {
53
53
 
54
54
  var response = this._responses.get(cacheKey);
55
55
 
56
- return response != null ? // $FlowFixMe[speculation-ambiguous]
57
- (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, response.payload), {}, {
56
+ if (response == null) {
57
+ return null;
58
+ }
59
+
60
+ if (Array.isArray(response.payload)) {
61
+ return response.payload.map(function (payload) {
62
+ return (// $FlowFixMe[incompatible-cast]
63
+ (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, payload), {}, {
64
+ extensions: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, payload.extensions), {}, {
65
+ cacheTimestamp: response.fetchTime
66
+ })
67
+ })
68
+ );
69
+ });
70
+ } // $FlowFixMe[incompatible-cast]
71
+
72
+
73
+ return (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, response.payload), {}, {
58
74
  extensions: (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, response.payload.extensions), {}, {
59
75
  cacheTimestamp: response.fetchTime
60
76
  })
61
- }) : null;
77
+ });
62
78
  };
63
79
 
64
80
  _proto.set = function set(queryID, variables, payload) {
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and 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
+ // flowlint ambiguous-object-type:error
11
+ 'use strict';
12
+
13
+ var generateID = require('../util/generateID');
14
+ /**
15
+ * Wraps the network with logging to ensure that network requests are
16
+ * always logged. Relying on each network callsite to be wrapped is
17
+ * untenable and will eventually lead to holes in the logging.
18
+ * NOTE: This function takes an environment instance, because Relay
19
+ * devtools will mutate the `env.__log` method, and the devtools rely
20
+ * on it to receive network events.
21
+ */
22
+
23
+
24
+ function wrapNetworkWithLogObserver(env, network) {
25
+ return {
26
+ execute: function execute(params, variables, cacheConfig, uploadables) {
27
+ var networkRequestId = generateID();
28
+ var logObserver = {
29
+ start: function start(subscription) {
30
+ env.__log({
31
+ name: 'network.start',
32
+ networkRequestId: networkRequestId,
33
+ params: params,
34
+ variables: variables,
35
+ cacheConfig: cacheConfig
36
+ });
37
+ },
38
+ next: function next(response) {
39
+ env.__log({
40
+ name: 'network.next',
41
+ networkRequestId: networkRequestId,
42
+ response: response
43
+ });
44
+ },
45
+ error: function error(_error) {
46
+ env.__log({
47
+ name: 'network.error',
48
+ networkRequestId: networkRequestId,
49
+ error: _error
50
+ });
51
+ },
52
+ complete: function complete() {
53
+ env.__log({
54
+ name: 'network.complete',
55
+ networkRequestId: networkRequestId
56
+ });
57
+ },
58
+ unsubscribe: function unsubscribe() {
59
+ env.__log({
60
+ name: 'network.unsubscribe',
61
+ networkRequestId: networkRequestId
62
+ });
63
+ }
64
+ };
65
+
66
+ var logRequestInfo = function logRequestInfo(info) {
67
+ env.__log({
68
+ name: 'network.info',
69
+ networkRequestId: networkRequestId,
70
+ info: info
71
+ });
72
+ };
73
+
74
+ return network.execute(params, variables, cacheConfig, uploadables, logRequestInfo)["do"](logObserver);
75
+ }
76
+ };
77
+ }
78
+
79
+ module.exports = wrapNetworkWithLogObserver;
@@ -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,7 +14,8 @@ var RelayConcreteNode = require('../util/RelayConcreteNode');
14
14
 
15
15
  var invariant = require('invariant');
16
16
 
17
- var warning = require("fbjs/lib/warning");
17
+ var warning = require("fbjs/lib/warning"); // The type of a graphql`...` tagged template expression.
18
+
18
19
 
19
20
  /**
20
21
  * Runtime function to correspond to the `graphql` tagged template function.
@@ -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.