relay-runtime 11.0.1 → 13.0.0-rc.1

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 -17
  3. package/handlers/connection/MutationHandlers.js.flow +7 -11
  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 +13 -19
  8. package/lib/handlers/connection/MutationHandlers.js +4 -7
  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 +10 -5
  25. package/lib/network/ConvertToExecuteFunction.js +2 -1
  26. package/lib/network/RelayNetwork.js +3 -2
  27. package/lib/network/RelayQueryResponseCache.js +21 -5
  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 +123 -54
  35. package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +518 -200
  36. package/lib/store/RelayConcreteVariables.js +26 -8
  37. package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
  38. package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
  39. package/lib/store/RelayModernEnvironment.js +175 -240
  40. package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
  41. package/lib/store/RelayModernOperationDescriptor.js +2 -1
  42. package/lib/store/RelayModernRecord.js +47 -12
  43. package/lib/store/RelayModernSelector.js +14 -8
  44. package/lib/store/RelayModernStore.js +56 -28
  45. package/lib/store/RelayOperationTracker.js +34 -24
  46. package/lib/store/RelayPublishQueue.js +41 -13
  47. package/lib/store/RelayReader.js +288 -48
  48. package/lib/store/RelayRecordSource.js +87 -3
  49. package/lib/store/RelayReferenceMarker.js +34 -22
  50. package/lib/store/RelayResponseNormalizer.js +211 -110
  51. package/lib/store/RelayStoreReactFlightUtils.js +4 -10
  52. package/lib/store/RelayStoreSubscriptions.js +14 -9
  53. package/lib/store/RelayStoreUtils.js +12 -7
  54. package/lib/store/ResolverCache.js +213 -0
  55. package/lib/store/ResolverFragments.js +61 -0
  56. package/lib/store/cloneRelayHandleSourceField.js +5 -4
  57. package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
  58. package/lib/store/createRelayContext.js +4 -2
  59. package/lib/store/readInlineData.js +6 -2
  60. package/lib/subscription/requestSubscription.js +34 -25
  61. package/lib/util/RelayConcreteNode.js +3 -0
  62. package/lib/util/RelayFeatureFlags.js +10 -4
  63. package/lib/util/RelayProfiler.js +17 -187
  64. package/lib/util/RelayReplaySubject.js +22 -7
  65. package/lib/util/RelayRuntimeTypes.js +0 -6
  66. package/lib/util/StringInterner.js +71 -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 +26 -16
  95. package/network/ConvertToExecuteFunction.js.flow +2 -2
  96. package/network/RelayNetwork.js.flow +4 -5
  97. package/network/RelayNetworkTypes.js.flow +5 -4
  98. package/network/RelayObservable.js.flow +1 -1
  99. package/network/RelayQueryResponseCache.js.flow +34 -21
  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 +141 -59
  111. package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +605 -303
  112. package/store/RelayConcreteVariables.js.flow +27 -8
  113. package/store/RelayExperimentalGraphResponseHandler.js.flow +124 -0
  114. package/store/RelayExperimentalGraphResponseTransform.js.flow +475 -0
  115. package/store/RelayModernEnvironment.js.flow +173 -240
  116. package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
  117. package/store/RelayModernOperationDescriptor.js.flow +12 -7
  118. package/store/RelayModernRecord.js.flow +67 -11
  119. package/store/RelayModernSelector.js.flow +24 -14
  120. package/store/RelayModernStore.js.flow +66 -36
  121. package/store/RelayOperationTracker.js.flow +59 -43
  122. package/store/RelayOptimisticRecordSource.js.flow +2 -2
  123. package/store/RelayPublishQueue.js.flow +79 -34
  124. package/store/RelayReader.js.flow +351 -73
  125. package/store/RelayRecordSource.js.flow +72 -6
  126. package/store/RelayReferenceMarker.js.flow +40 -26
  127. package/store/RelayResponseNormalizer.js.flow +258 -99
  128. package/store/RelayStoreReactFlightUtils.js.flow +4 -11
  129. package/store/RelayStoreSubscriptions.js.flow +19 -11
  130. package/store/RelayStoreTypes.js.flow +209 -43
  131. package/store/RelayStoreUtils.js.flow +24 -11
  132. package/store/ResolverCache.js.flow +249 -0
  133. package/store/ResolverFragments.js.flow +121 -0
  134. package/store/StoreInspector.js.flow +2 -2
  135. package/store/TypeID.js.flow +1 -1
  136. package/store/ViewerPattern.js.flow +2 -2
  137. package/store/cloneRelayHandleSourceField.js.flow +5 -6
  138. package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
  139. package/store/createFragmentSpecResolver.js.flow +3 -4
  140. package/store/createRelayContext.js.flow +3 -3
  141. package/store/normalizeRelayPayload.js.flow +6 -7
  142. package/store/readInlineData.js.flow +7 -8
  143. package/subscription/requestSubscription.js.flow +53 -41
  144. package/util/NormalizationNode.js.flow +10 -3
  145. package/util/ReaderNode.js.flow +38 -2
  146. package/util/RelayConcreteNode.js.flow +5 -0
  147. package/util/RelayFeatureFlags.js.flow +24 -10
  148. package/util/RelayProfiler.js.flow +22 -194
  149. package/util/RelayReplaySubject.js.flow +9 -9
  150. package/util/RelayRuntimeTypes.js.flow +72 -3
  151. package/util/StringInterner.js.flow +69 -0
  152. package/util/createPayloadFor3DField.js.flow +3 -3
  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 +1 -0
  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
@@ -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;
@@ -0,0 +1,238 @@
1
+ /**
2
+ * Copyright (c) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @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 'FragmentSpread':
96
+ // Explicitly ignore
97
+ break;
98
+
99
+ default:
100
+ throw new Error('Encountered an unexpected ReaderSelection variant in RelayRecordSourceProxy. This indicates a bug in Relay.');
101
+ }
102
+ };
103
+
104
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
105
+ _loop();
106
+ }
107
+ } catch (err) {
108
+ _iterator.e(err);
109
+ } finally {
110
+ _iterator.f();
111
+ }
112
+ }
113
+
114
+ function createSetterForPluralLinkedField(selection, queryVariables, recordProxy, root) {
115
+ return function set(newValue) {
116
+ var _selection$args3;
117
+
118
+ var variables = getArgumentValues((_selection$args3 = selection.args) !== null && _selection$args3 !== void 0 ? _selection$args3 : [], queryVariables);
119
+
120
+ if (newValue == null) {
121
+ // $FlowFixMe[unclear-type] No good way to type these variables
122
+ recordProxy.setValue(null, selection.name, variables);
123
+ } else {
124
+ var recordProxies = newValue.map(function (item) {
125
+ if (item == null) {
126
+ throw new Error('When assigning an array of items, none of the items should be null or undefined.');
127
+ }
128
+
129
+ var __id = item.__id;
130
+
131
+ if (__id == null) {
132
+ throw new Error('The __id field must be present on each item passed to the setter. This indicates a bug in Relay.');
133
+ }
134
+
135
+ var newValueRecord = root.get(__id);
136
+
137
+ if (newValueRecord == null) {
138
+ throw new Error("Did not find item with data id ".concat(__id, " in the store."));
139
+ }
140
+
141
+ return newValueRecord;
142
+ });
143
+ recordProxy.setLinkedRecords(recordProxies, selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
144
+ variables);
145
+ }
146
+ };
147
+ }
148
+
149
+ function createSetterForSingularLinkedField(selection, queryVariables, recordProxy, root) {
150
+ return function set(newValue) {
151
+ var _selection$args4;
152
+
153
+ var variables = getArgumentValues((_selection$args4 = selection.args) !== null && _selection$args4 !== void 0 ? _selection$args4 : [], queryVariables);
154
+
155
+ if (newValue == null) {
156
+ // $FlowFixMe[unclear-type] No good way to type these variables
157
+ recordProxy.setValue(null, selection.name, variables);
158
+ } else {
159
+ var __id = newValue.__id;
160
+
161
+ if (__id == null) {
162
+ throw new Error('The __id field must be present on the argument. This indicates a bug in Relay.');
163
+ }
164
+
165
+ var newValueRecord = root.get(__id);
166
+
167
+ if (newValueRecord == null) {
168
+ throw new Error("Did not find item with data id ".concat(__id, " in the store."));
169
+ }
170
+
171
+ recordProxy.setLinkedRecord(newValueRecord, selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
172
+ variables);
173
+ }
174
+ };
175
+ }
176
+
177
+ function createGetterForPluralLinkedField(selection, queryVariables, recordProxy, root) {
178
+ return function () {
179
+ var _selection$args5;
180
+
181
+ var variables = getArgumentValues((_selection$args5 = selection.args) !== null && _selection$args5 !== void 0 ? _selection$args5 : [], queryVariables);
182
+ var linkedRecords = recordProxy.getLinkedRecords(selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
183
+ variables);
184
+
185
+ if (linkedRecords != null) {
186
+ return linkedRecords.map(function (linkedRecord) {
187
+ if (linkedRecord != null) {
188
+ var updatableProxy = {};
189
+ updateProxyFromSelections(updatableProxy, linkedRecord, queryVariables, selection.selections, root);
190
+
191
+ if (process.env.NODE_ENV !== "production") {
192
+ Object.freeze(updatableProxy);
193
+ } // Flow incorrect assumes that the return value for the get method must match
194
+ // the set parameter.
195
+ // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
196
+
197
+
198
+ return updatableProxy;
199
+ } else {
200
+ return linkedRecord;
201
+ } // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
202
+
203
+ });
204
+ } else {
205
+ return linkedRecords;
206
+ }
207
+ };
208
+ }
209
+
210
+ function createGetterForSingularLinkedField(selection, queryVariables, recordProxy, root) {
211
+ return function () {
212
+ var _selection$args6;
213
+
214
+ var variables = getArgumentValues((_selection$args6 = selection.args) !== null && _selection$args6 !== void 0 ? _selection$args6 : [], queryVariables);
215
+ var linkedRecord = recordProxy.getLinkedRecord(selection.name, // $FlowFixMe[unclear-type] No good way to type these variables
216
+ variables);
217
+
218
+ if (linkedRecord != null) {
219
+ var updatableProxy = {};
220
+ updateProxyFromSelections(updatableProxy, linkedRecord, queryVariables, selection.selections, root);
221
+
222
+ if (process.env.NODE_ENV !== "production") {
223
+ Object.freeze(updatableProxy);
224
+ } // Flow incorrect assumes that the return value for the get method must match
225
+ // the set parameter.
226
+ // $FlowFixMe[unclear-type] Typed by the generated updatable query flow type
227
+
228
+
229
+ return updatableProxy;
230
+ } else {
231
+ return linkedRecord;
232
+ }
233
+ };
234
+ }
235
+
236
+ module.exports = {
237
+ readUpdatableQuery_EXPERIMENTAL: readUpdatableQuery_EXPERIMENTAL
238
+ };
@@ -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;
@@ -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
@@ -10,15 +10,16 @@
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('./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);
@@ -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("fbjs/lib/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) Facebook, Inc. and its affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ *
7
+ *
8
+ * @format
9
+ */
10
+ // 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;
@@ -12,9 +12,10 @@
12
12
 
13
13
  var RelayConcreteNode = require('../util/RelayConcreteNode');
14
14
 
15
- var invariant = require("fbjs/lib/invariant");
15
+ var invariant = require('invariant');
16
+
17
+ var warning = require("fbjs/lib/warning"); // The type of a graphql`...` tagged template expression.
16
18
 
17
- var warning = require("fbjs/lib/warning");
18
19
 
19
20
  /**
20
21
  * Runtime function to correspond to the `graphql` tagged template function.