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.
- package/handlers/RelayDefaultHandlerProvider.js.flow +2 -2
- package/handlers/connection/ConnectionHandler.js.flow +8 -17
- package/handlers/connection/MutationHandlers.js.flow +7 -11
- package/index.js +1 -1
- package/index.js.flow +60 -36
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +13 -19
- package/lib/handlers/connection/MutationHandlers.js +4 -7
- package/lib/index.js +58 -43
- package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +152 -0
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +419 -0
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
- package/lib/multi-actor-environment/index.js +21 -0
- package/lib/mutations/RelayDeclarativeMutationConfig.js +4 -1
- package/lib/mutations/RelayRecordProxy.js +3 -2
- package/lib/mutations/RelayRecordSourceMutator.js +3 -2
- package/lib/mutations/RelayRecordSourceProxy.js +12 -4
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -5
- package/lib/mutations/applyOptimisticMutation.js +6 -6
- package/lib/mutations/commitMutation.js +14 -10
- package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +238 -0
- package/lib/mutations/validateMutation.js +10 -5
- package/lib/network/ConvertToExecuteFunction.js +2 -1
- package/lib/network/RelayNetwork.js +3 -2
- package/lib/network/RelayQueryResponseCache.js +21 -5
- package/lib/network/wrapNetworkWithLogObserver.js +79 -0
- package/lib/query/GraphQLTag.js +3 -2
- package/lib/query/fetchQuery.js +6 -5
- package/lib/query/fetchQueryInternal.js +1 -1
- package/lib/query/fetchQuery_DEPRECATED.js +2 -1
- package/lib/store/ClientID.js +7 -1
- package/lib/store/DataChecker.js +123 -54
- package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +518 -200
- package/lib/store/RelayConcreteVariables.js +26 -8
- package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
- package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
- package/lib/store/RelayModernEnvironment.js +175 -240
- package/lib/store/RelayModernFragmentSpecResolver.js +52 -26
- package/lib/store/RelayModernOperationDescriptor.js +2 -1
- package/lib/store/RelayModernRecord.js +47 -12
- package/lib/store/RelayModernSelector.js +14 -8
- package/lib/store/RelayModernStore.js +56 -28
- package/lib/store/RelayOperationTracker.js +34 -24
- package/lib/store/RelayPublishQueue.js +41 -13
- package/lib/store/RelayReader.js +288 -48
- package/lib/store/RelayRecordSource.js +87 -3
- package/lib/store/RelayReferenceMarker.js +34 -22
- package/lib/store/RelayResponseNormalizer.js +211 -110
- package/lib/store/RelayStoreReactFlightUtils.js +4 -10
- package/lib/store/RelayStoreSubscriptions.js +14 -9
- package/lib/store/RelayStoreUtils.js +12 -7
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +61 -0
- package/lib/store/cloneRelayHandleSourceField.js +5 -4
- package/lib/store/cloneRelayScalarHandleSourceField.js +5 -4
- package/lib/store/createRelayContext.js +4 -2
- package/lib/store/readInlineData.js +6 -2
- package/lib/subscription/requestSubscription.js +34 -25
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayFeatureFlags.js +10 -4
- package/lib/util/RelayProfiler.js +17 -187
- package/lib/util/RelayReplaySubject.js +22 -7
- package/lib/util/RelayRuntimeTypes.js +0 -6
- package/lib/util/StringInterner.js +71 -0
- package/lib/util/getFragmentIdentifier.js +15 -7
- package/lib/util/getOperation.js +2 -1
- package/lib/util/getPaginationMetadata.js +41 -0
- package/lib/util/getPaginationVariables.js +66 -0
- package/lib/util/getPendingOperationsForFragment.js +55 -0
- package/lib/util/getRefetchMetadata.js +36 -0
- package/lib/util/getRelayHandleKey.js +2 -2
- package/lib/util/getRequestIdentifier.js +2 -2
- package/lib/util/getValueAtPath.js +51 -0
- package/lib/util/isEmptyObject.js +1 -1
- package/lib/util/registerEnvironmentWithDevTools.js +26 -0
- package/lib/util/withDuration.js +31 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +225 -0
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +506 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +261 -0
- package/multi-actor-environment/index.js.flow +26 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +32 -26
- package/mutations/RelayRecordProxy.js.flow +4 -5
- package/mutations/RelayRecordSourceMutator.js.flow +4 -6
- package/mutations/RelayRecordSourceProxy.js.flow +19 -10
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +22 -7
- package/mutations/applyOptimisticMutation.js.flow +13 -14
- package/mutations/commitLocalUpdate.js.flow +1 -1
- package/mutations/commitMutation.js.flow +35 -46
- package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +309 -0
- package/mutations/validateMutation.js.flow +26 -16
- package/network/ConvertToExecuteFunction.js.flow +2 -2
- package/network/RelayNetwork.js.flow +4 -5
- package/network/RelayNetworkTypes.js.flow +5 -4
- package/network/RelayObservable.js.flow +1 -1
- package/network/RelayQueryResponseCache.js.flow +34 -21
- package/network/wrapNetworkWithLogObserver.js.flow +100 -0
- package/package.json +3 -2
- package/query/GraphQLTag.js.flow +9 -9
- package/query/PreloadableQueryRegistry.js.flow +2 -1
- package/query/fetchQuery.js.flow +11 -13
- package/query/fetchQueryInternal.js.flow +6 -9
- package/query/fetchQuery_DEPRECATED.js.flow +6 -6
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +14 -3
- package/store/DataChecker.js.flow +141 -59
- package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +605 -303
- package/store/RelayConcreteVariables.js.flow +27 -8
- package/store/RelayExperimentalGraphResponseHandler.js.flow +124 -0
- package/store/RelayExperimentalGraphResponseTransform.js.flow +475 -0
- package/store/RelayModernEnvironment.js.flow +173 -240
- package/store/RelayModernFragmentSpecResolver.js.flow +55 -31
- package/store/RelayModernOperationDescriptor.js.flow +12 -7
- package/store/RelayModernRecord.js.flow +67 -11
- package/store/RelayModernSelector.js.flow +24 -14
- package/store/RelayModernStore.js.flow +66 -36
- package/store/RelayOperationTracker.js.flow +59 -43
- package/store/RelayOptimisticRecordSource.js.flow +2 -2
- package/store/RelayPublishQueue.js.flow +79 -34
- package/store/RelayReader.js.flow +351 -73
- package/store/RelayRecordSource.js.flow +72 -6
- package/store/RelayReferenceMarker.js.flow +40 -26
- package/store/RelayResponseNormalizer.js.flow +258 -99
- package/store/RelayStoreReactFlightUtils.js.flow +4 -11
- package/store/RelayStoreSubscriptions.js.flow +19 -11
- package/store/RelayStoreTypes.js.flow +209 -43
- package/store/RelayStoreUtils.js.flow +24 -11
- package/store/ResolverCache.js.flow +249 -0
- package/store/ResolverFragments.js.flow +121 -0
- package/store/StoreInspector.js.flow +2 -2
- package/store/TypeID.js.flow +1 -1
- package/store/ViewerPattern.js.flow +2 -2
- package/store/cloneRelayHandleSourceField.js.flow +5 -6
- package/store/cloneRelayScalarHandleSourceField.js.flow +5 -6
- package/store/createFragmentSpecResolver.js.flow +3 -4
- package/store/createRelayContext.js.flow +3 -3
- package/store/normalizeRelayPayload.js.flow +6 -7
- package/store/readInlineData.js.flow +7 -8
- package/subscription/requestSubscription.js.flow +53 -41
- package/util/NormalizationNode.js.flow +10 -3
- package/util/ReaderNode.js.flow +38 -2
- package/util/RelayConcreteNode.js.flow +5 -0
- package/util/RelayFeatureFlags.js.flow +24 -10
- package/util/RelayProfiler.js.flow +22 -194
- package/util/RelayReplaySubject.js.flow +9 -9
- package/util/RelayRuntimeTypes.js.flow +72 -3
- package/util/StringInterner.js.flow +69 -0
- package/util/createPayloadFor3DField.js.flow +3 -3
- package/util/getFragmentIdentifier.js.flow +27 -15
- package/util/getOperation.js.flow +2 -2
- package/util/getPaginationMetadata.js.flow +72 -0
- package/util/getPaginationVariables.js.flow +108 -0
- package/util/getPendingOperationsForFragment.js.flow +62 -0
- package/util/getRefetchMetadata.js.flow +79 -0
- package/util/getRelayHandleKey.js.flow +1 -2
- package/util/getRequestIdentifier.js.flow +3 -3
- package/util/getValueAtPath.js.flow +46 -0
- package/util/isEmptyObject.js.flow +1 -0
- package/util/registerEnvironmentWithDevTools.js.flow +33 -0
- package/util/resolveImmediate.js.flow +1 -1
- package/util/withDuration.js.flow +32 -0
- package/lib/store/RelayRecordSourceMapImpl.js +0 -107
- package/lib/store/RelayStoreSubscriptionsUsingMapByID.js +0 -318
- package/store/RelayRecordSourceMapImpl.js.flow +0 -91
- package/store/RelayStoreSubscriptionsUsingMapByID.js.flow +0 -283
|
@@ -16,61 +16,67 @@ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime
|
|
|
16
16
|
|
|
17
17
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
18
18
|
|
|
19
|
+
var _require = require('../multi-actor-environment/ActorUtils'),
|
|
20
|
+
ACTOR_IDENTIFIER_FIELD_NAME = _require.ACTOR_IDENTIFIER_FIELD_NAME,
|
|
21
|
+
getActorIdentifierFromPayload = _require.getActorIdentifierFromPayload;
|
|
22
|
+
|
|
23
|
+
var _require2 = require('../util/RelayConcreteNode'),
|
|
24
|
+
ACTOR_CHANGE = _require2.ACTOR_CHANGE,
|
|
25
|
+
CLIENT_COMPONENT = _require2.CLIENT_COMPONENT,
|
|
26
|
+
CLIENT_EXTENSION = _require2.CLIENT_EXTENSION,
|
|
27
|
+
CONDITION = _require2.CONDITION,
|
|
28
|
+
DEFER = _require2.DEFER,
|
|
29
|
+
FLIGHT_FIELD = _require2.FLIGHT_FIELD,
|
|
30
|
+
FRAGMENT_SPREAD = _require2.FRAGMENT_SPREAD,
|
|
31
|
+
INLINE_FRAGMENT = _require2.INLINE_FRAGMENT,
|
|
32
|
+
LINKED_FIELD = _require2.LINKED_FIELD,
|
|
33
|
+
LINKED_HANDLE = _require2.LINKED_HANDLE,
|
|
34
|
+
MODULE_IMPORT = _require2.MODULE_IMPORT,
|
|
35
|
+
SCALAR_FIELD = _require2.SCALAR_FIELD,
|
|
36
|
+
SCALAR_HANDLE = _require2.SCALAR_HANDLE,
|
|
37
|
+
STREAM = _require2.STREAM,
|
|
38
|
+
TYPE_DISCRIMINATOR = _require2.TYPE_DISCRIMINATOR;
|
|
39
|
+
|
|
19
40
|
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
20
41
|
|
|
42
|
+
var _require3 = require('./ClientID'),
|
|
43
|
+
generateClientID = _require3.generateClientID,
|
|
44
|
+
isClientID = _require3.isClientID;
|
|
45
|
+
|
|
46
|
+
var _require4 = require('./RelayConcreteVariables'),
|
|
47
|
+
getLocalVariables = _require4.getLocalVariables;
|
|
48
|
+
|
|
21
49
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
22
50
|
|
|
23
|
-
var
|
|
51
|
+
var _require5 = require('./RelayModernSelector'),
|
|
52
|
+
createNormalizationSelector = _require5.createNormalizationSelector;
|
|
53
|
+
|
|
54
|
+
var _require6 = require('./RelayStoreReactFlightUtils'),
|
|
55
|
+
REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY = _require6.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY,
|
|
56
|
+
REACT_FLIGHT_TREE_STORAGE_KEY = _require6.REACT_FLIGHT_TREE_STORAGE_KEY,
|
|
57
|
+
REACT_FLIGHT_TYPE_NAME = _require6.REACT_FLIGHT_TYPE_NAME,
|
|
58
|
+
refineToReactFlightPayloadData = _require6.refineToReactFlightPayloadData;
|
|
59
|
+
|
|
60
|
+
var _require7 = require('./RelayStoreUtils'),
|
|
61
|
+
ROOT_ID = _require7.ROOT_ID,
|
|
62
|
+
ROOT_TYPE = _require7.ROOT_TYPE,
|
|
63
|
+
TYPENAME_KEY = _require7.TYPENAME_KEY,
|
|
64
|
+
getArgumentValues = _require7.getArgumentValues,
|
|
65
|
+
getHandleStorageKey = _require7.getHandleStorageKey,
|
|
66
|
+
getModuleComponentKey = _require7.getModuleComponentKey,
|
|
67
|
+
getModuleOperationKey = _require7.getModuleOperationKey,
|
|
68
|
+
getStorageKey = _require7.getStorageKey;
|
|
69
|
+
|
|
70
|
+
var _require8 = require('./TypeID'),
|
|
71
|
+
TYPE_SCHEMA_TYPE = _require8.TYPE_SCHEMA_TYPE,
|
|
72
|
+
generateTypeID = _require8.generateTypeID;
|
|
24
73
|
|
|
25
74
|
var areEqual = require("fbjs/lib/areEqual");
|
|
26
75
|
|
|
27
|
-
var invariant = require(
|
|
76
|
+
var invariant = require('invariant');
|
|
28
77
|
|
|
29
78
|
var warning = require("fbjs/lib/warning");
|
|
30
79
|
|
|
31
|
-
var _require = require('../util/RelayConcreteNode'),
|
|
32
|
-
CONDITION = _require.CONDITION,
|
|
33
|
-
CLIENT_COMPONENT = _require.CLIENT_COMPONENT,
|
|
34
|
-
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
35
|
-
DEFER = _require.DEFER,
|
|
36
|
-
FLIGHT_FIELD = _require.FLIGHT_FIELD,
|
|
37
|
-
FRAGMENT_SPREAD = _require.FRAGMENT_SPREAD,
|
|
38
|
-
INLINE_FRAGMENT = _require.INLINE_FRAGMENT,
|
|
39
|
-
LINKED_FIELD = _require.LINKED_FIELD,
|
|
40
|
-
LINKED_HANDLE = _require.LINKED_HANDLE,
|
|
41
|
-
MODULE_IMPORT = _require.MODULE_IMPORT,
|
|
42
|
-
SCALAR_FIELD = _require.SCALAR_FIELD,
|
|
43
|
-
SCALAR_HANDLE = _require.SCALAR_HANDLE,
|
|
44
|
-
STREAM = _require.STREAM,
|
|
45
|
-
TYPE_DISCRIMINATOR = _require.TYPE_DISCRIMINATOR;
|
|
46
|
-
|
|
47
|
-
var _require2 = require('./ClientID'),
|
|
48
|
-
generateClientID = _require2.generateClientID,
|
|
49
|
-
isClientID = _require2.isClientID;
|
|
50
|
-
|
|
51
|
-
var _require3 = require('./RelayModernSelector'),
|
|
52
|
-
createNormalizationSelector = _require3.createNormalizationSelector;
|
|
53
|
-
|
|
54
|
-
var _require4 = require('./RelayStoreReactFlightUtils'),
|
|
55
|
-
refineToReactFlightPayloadData = _require4.refineToReactFlightPayloadData,
|
|
56
|
-
REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY = _require4.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY,
|
|
57
|
-
REACT_FLIGHT_TREE_STORAGE_KEY = _require4.REACT_FLIGHT_TREE_STORAGE_KEY,
|
|
58
|
-
REACT_FLIGHT_TYPE_NAME = _require4.REACT_FLIGHT_TYPE_NAME;
|
|
59
|
-
|
|
60
|
-
var _require5 = require('./RelayStoreUtils'),
|
|
61
|
-
getArgumentValues = _require5.getArgumentValues,
|
|
62
|
-
getHandleStorageKey = _require5.getHandleStorageKey,
|
|
63
|
-
getModuleComponentKey = _require5.getModuleComponentKey,
|
|
64
|
-
getModuleOperationKey = _require5.getModuleOperationKey,
|
|
65
|
-
getStorageKey = _require5.getStorageKey,
|
|
66
|
-
TYPENAME_KEY = _require5.TYPENAME_KEY,
|
|
67
|
-
ROOT_ID = _require5.ROOT_ID,
|
|
68
|
-
ROOT_TYPE = _require5.ROOT_TYPE;
|
|
69
|
-
|
|
70
|
-
var _require6 = require('./TypeID'),
|
|
71
|
-
generateTypeID = _require6.generateTypeID,
|
|
72
|
-
TYPE_SCHEMA_TYPE = _require6.TYPE_SCHEMA_TYPE;
|
|
73
|
-
|
|
74
80
|
/**
|
|
75
81
|
* Normalizes the results of a query and standard GraphQL response, writing the
|
|
76
82
|
* normalized records/fields into the given MutableRecordSource.
|
|
@@ -91,13 +97,14 @@ function normalize(recordSource, selector, response, options) {
|
|
|
91
97
|
|
|
92
98
|
var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
93
99
|
function RelayResponseNormalizer(recordSource, variables, options) {
|
|
100
|
+
this._actorIdentifier = options.actorIdentifier;
|
|
94
101
|
this._getDataId = options.getDataID;
|
|
95
102
|
this._handleFieldPayloads = [];
|
|
96
103
|
this._treatMissingFieldsAsNull = options.treatMissingFieldsAsNull;
|
|
97
104
|
this._incrementalPlaceholders = [];
|
|
98
105
|
this._isClientExtension = false;
|
|
99
106
|
this._isUnmatchedAbstractType = false;
|
|
100
|
-
this.
|
|
107
|
+
this._followupPayloads = [];
|
|
101
108
|
this._path = options.path ? (0, _toConsumableArray2["default"])(options.path) : [];
|
|
102
109
|
this._recordSource = recordSource;
|
|
103
110
|
this._variables = variables;
|
|
@@ -119,15 +126,14 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
119
126
|
errors: null,
|
|
120
127
|
fieldPayloads: this._handleFieldPayloads,
|
|
121
128
|
incrementalPlaceholders: this._incrementalPlaceholders,
|
|
122
|
-
|
|
129
|
+
followupPayloads: this._followupPayloads,
|
|
123
130
|
source: this._recordSource,
|
|
124
131
|
isFinal: false
|
|
125
132
|
};
|
|
126
133
|
};
|
|
127
134
|
|
|
128
135
|
_proto._getVariableValue = function _getVariableValue(name) {
|
|
129
|
-
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
130
|
-
|
|
136
|
+
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
131
137
|
return this._variables[name];
|
|
132
138
|
};
|
|
133
139
|
|
|
@@ -149,7 +155,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
149
155
|
break;
|
|
150
156
|
|
|
151
157
|
case CONDITION:
|
|
152
|
-
var conditionValue = this._getVariableValue(selection.condition);
|
|
158
|
+
var conditionValue = Boolean(this._getVariableValue(selection.condition));
|
|
153
159
|
|
|
154
160
|
if (conditionValue === selection.passingValue) {
|
|
155
161
|
this._traverseSelections(selection, record, data);
|
|
@@ -159,8 +165,12 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
159
165
|
|
|
160
166
|
case FRAGMENT_SPREAD:
|
|
161
167
|
{
|
|
168
|
+
var prevVariables = this._variables;
|
|
169
|
+
this._variables = getLocalVariables(this._variables, selection.fragment.argumentDefinitions, selection.args);
|
|
170
|
+
|
|
162
171
|
this._traverseSelections(selection.fragment, record, data);
|
|
163
172
|
|
|
173
|
+
this._variables = prevVariables;
|
|
164
174
|
break;
|
|
165
175
|
}
|
|
166
176
|
|
|
@@ -174,7 +184,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
174
184
|
if (_typeName === selection.type) {
|
|
175
185
|
this._traverseSelections(selection, record, data);
|
|
176
186
|
}
|
|
177
|
-
} else
|
|
187
|
+
} else {
|
|
178
188
|
var implementsInterface = data.hasOwnProperty(abstractKey);
|
|
179
189
|
|
|
180
190
|
var _typeName2 = RelayModernRecord.getType(record);
|
|
@@ -194,18 +204,6 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
194
204
|
if (implementsInterface) {
|
|
195
205
|
this._traverseSelections(selection, record, data);
|
|
196
206
|
}
|
|
197
|
-
} else {
|
|
198
|
-
// legacy behavior for abstract refinements: always normalize even
|
|
199
|
-
// if the type doesn't conform, but track if the type matches or not
|
|
200
|
-
// for determining whether response fields are expected to be present
|
|
201
|
-
var _implementsInterface = data.hasOwnProperty(abstractKey);
|
|
202
|
-
|
|
203
|
-
var parentIsUnmatchedAbstractType = this._isUnmatchedAbstractType;
|
|
204
|
-
this._isUnmatchedAbstractType = this._isUnmatchedAbstractType || !_implementsInterface;
|
|
205
|
-
|
|
206
|
-
this._traverseSelections(selection, record, data);
|
|
207
|
-
|
|
208
|
-
this._isUnmatchedAbstractType = parentIsUnmatchedAbstractType;
|
|
209
207
|
}
|
|
210
208
|
|
|
211
209
|
break;
|
|
@@ -213,26 +211,23 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
213
211
|
|
|
214
212
|
case TYPE_DISCRIMINATOR:
|
|
215
213
|
{
|
|
216
|
-
|
|
217
|
-
var _abstractKey = selection.abstractKey;
|
|
214
|
+
var _abstractKey = selection.abstractKey;
|
|
218
215
|
|
|
219
|
-
|
|
216
|
+
var _implementsInterface = data.hasOwnProperty(_abstractKey);
|
|
220
217
|
|
|
221
|
-
|
|
218
|
+
var _typeName3 = RelayModernRecord.getType(record);
|
|
222
219
|
|
|
223
|
-
|
|
220
|
+
var _typeID = generateTypeID(_typeName3);
|
|
224
221
|
|
|
225
|
-
|
|
222
|
+
var _typeRecord = this._recordSource.get(_typeID);
|
|
226
223
|
|
|
227
|
-
|
|
228
|
-
|
|
224
|
+
if (_typeRecord == null) {
|
|
225
|
+
_typeRecord = RelayModernRecord.create(_typeID, TYPE_SCHEMA_TYPE);
|
|
229
226
|
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
RelayModernRecord.setValue(_typeRecord, _abstractKey, _implementsInterface2);
|
|
227
|
+
this._recordSource.set(_typeID, _typeRecord);
|
|
234
228
|
}
|
|
235
229
|
|
|
230
|
+
RelayModernRecord.setValue(_typeRecord, _abstractKey, _implementsInterface);
|
|
236
231
|
break;
|
|
237
232
|
}
|
|
238
233
|
|
|
@@ -243,12 +238,17 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
243
238
|
var handleKey = getHandleStorageKey(selection, this._variables);
|
|
244
239
|
|
|
245
240
|
this._handleFieldPayloads.push({
|
|
241
|
+
/* $FlowFixMe[class-object-subtyping] added when improving typing
|
|
242
|
+
* for this parameters */
|
|
246
243
|
args: args,
|
|
247
244
|
dataID: RelayModernRecord.getDataID(record),
|
|
248
245
|
fieldKey: fieldKey,
|
|
249
246
|
handle: selection.handle,
|
|
250
247
|
handleKey: handleKey,
|
|
251
|
-
handleArgs: selection.handleArgs ?
|
|
248
|
+
handleArgs: selection.handleArgs ?
|
|
249
|
+
/* $FlowFixMe[class-object-subtyping] added when improving typing
|
|
250
|
+
* for this parameters */
|
|
251
|
+
getArgumentValues(selection.handleArgs, this._variables) : {}
|
|
252
252
|
});
|
|
253
253
|
|
|
254
254
|
break;
|
|
@@ -295,6 +295,11 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
295
295
|
|
|
296
296
|
break;
|
|
297
297
|
|
|
298
|
+
case ACTOR_CHANGE:
|
|
299
|
+
this._normalizeActorChange(node, selection, record, data);
|
|
300
|
+
|
|
301
|
+
break;
|
|
302
|
+
|
|
298
303
|
default:
|
|
299
304
|
selection;
|
|
300
305
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
@@ -322,7 +327,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
322
327
|
label: defer.label,
|
|
323
328
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
324
329
|
selector: createNormalizationSelector(defer, RelayModernRecord.getDataID(record), this._variables),
|
|
325
|
-
typeName: RelayModernRecord.getType(record)
|
|
330
|
+
typeName: RelayModernRecord.getType(record),
|
|
331
|
+
actorIdentifier: this._actorIdentifier
|
|
326
332
|
});
|
|
327
333
|
}
|
|
328
334
|
};
|
|
@@ -348,7 +354,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
348
354
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
349
355
|
parentID: RelayModernRecord.getDataID(record),
|
|
350
356
|
node: stream,
|
|
351
|
-
variables: this._variables
|
|
357
|
+
variables: this._variables,
|
|
358
|
+
actorIdentifier: this._actorIdentifier
|
|
352
359
|
});
|
|
353
360
|
}
|
|
354
361
|
};
|
|
@@ -364,13 +371,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
364
371
|
RelayModernRecord.setValue(record, operationKey, operationReference !== null && operationReference !== void 0 ? operationReference : null);
|
|
365
372
|
|
|
366
373
|
if (operationReference != null) {
|
|
367
|
-
this.
|
|
374
|
+
this._followupPayloads.push({
|
|
375
|
+
kind: 'ModuleImportPayload',
|
|
376
|
+
args: moduleImport.args,
|
|
368
377
|
data: data,
|
|
369
378
|
dataID: RelayModernRecord.getDataID(record),
|
|
370
379
|
operationReference: operationReference,
|
|
371
380
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
372
381
|
typeName: typeName,
|
|
373
|
-
variables: this._variables
|
|
382
|
+
variables: this._variables,
|
|
383
|
+
actorIdentifier: this._actorIdentifier
|
|
374
384
|
});
|
|
375
385
|
}
|
|
376
386
|
};
|
|
@@ -411,7 +421,11 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
411
421
|
|
|
412
422
|
if (process.env.NODE_ENV !== "production") {
|
|
413
423
|
if (selection.kind === SCALAR_FIELD) {
|
|
414
|
-
this._validateConflictingFieldsWithIdenticalId(record, storageKey,
|
|
424
|
+
this._validateConflictingFieldsWithIdenticalId(record, storageKey, // When using `treatMissingFieldsAsNull` the conflicting validation raises a false positive
|
|
425
|
+
// because the value is set using `null` but validated using `fieldValue` which at this point
|
|
426
|
+
// will be `undefined`.
|
|
427
|
+
// Setting this to `null` matches the value that we actually set to the `fieldValue`.
|
|
428
|
+
null);
|
|
415
429
|
}
|
|
416
430
|
}
|
|
417
431
|
|
|
@@ -441,19 +455,97 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
441
455
|
}
|
|
442
456
|
};
|
|
443
457
|
|
|
458
|
+
_proto._normalizeActorChange = function _normalizeActorChange(parent, selection, record, data) {
|
|
459
|
+
var _field$concreteType;
|
|
460
|
+
|
|
461
|
+
var field = selection.linkedField;
|
|
462
|
+
!(typeof data === 'object' && data) ? process.env.NODE_ENV !== "production" ? invariant(false, '_normalizeActorChange(): Expected data for field `%s` to be an object.', field.name) : invariant(false) : void 0;
|
|
463
|
+
var responseKey = field.alias || field.name;
|
|
464
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
465
|
+
var fieldValue = data[responseKey];
|
|
466
|
+
|
|
467
|
+
if (fieldValue == null) {
|
|
468
|
+
if (fieldValue === undefined) {
|
|
469
|
+
var isOptionalField = this._isClientExtension || this._isUnmatchedAbstractType;
|
|
470
|
+
|
|
471
|
+
if (isOptionalField) {
|
|
472
|
+
return;
|
|
473
|
+
} else if (!this._treatMissingFieldsAsNull) {
|
|
474
|
+
if (process.env.NODE_ENV !== "production") {
|
|
475
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayResponseNormalizer: Payload did not contain a value ' + 'for field `%s: %s`. Check that you are parsing with the same ' + 'query that was used to fetch the payload.', responseKey, storageKey) : void 0;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
return;
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
RelayModernRecord.setValue(record, storageKey, null);
|
|
483
|
+
return;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
var actorIdentifier = getActorIdentifierFromPayload(fieldValue);
|
|
487
|
+
|
|
488
|
+
if (actorIdentifier == null) {
|
|
489
|
+
if (process.env.NODE_ENV !== "production") {
|
|
490
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayResponseNormalizer: Payload did not contain a value ' + 'for field `%s`. Check that you are parsing with the same ' + 'query that was used to fetch the payload. Payload is `%s`.', ACTOR_IDENTIFIER_FIELD_NAME, JSON.stringify(fieldValue, null, 2)) : void 0;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
RelayModernRecord.setValue(record, storageKey, null);
|
|
494
|
+
return;
|
|
495
|
+
} // $FlowFixMe[incompatible-call]
|
|
496
|
+
|
|
497
|
+
|
|
498
|
+
var typeName = (_field$concreteType = field.concreteType) !== null && _field$concreteType !== void 0 ? _field$concreteType : this._getRecordType(fieldValue);
|
|
499
|
+
var nextID = this._getDataId( // $FlowFixMe[incompatible-call]
|
|
500
|
+
fieldValue, typeName) || RelayModernRecord.getLinkedRecordID(record, storageKey) || generateClientID(RelayModernRecord.getDataID(record), storageKey);
|
|
501
|
+
!(typeof nextID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected id on field `%s` to be a string.', storageKey) : invariant(false) : void 0;
|
|
502
|
+
RelayModernRecord.setActorLinkedRecordID(record, storageKey, actorIdentifier, nextID);
|
|
503
|
+
|
|
504
|
+
this._followupPayloads.push({
|
|
505
|
+
kind: 'ActorPayload',
|
|
506
|
+
data: fieldValue,
|
|
507
|
+
dataID: nextID,
|
|
508
|
+
path: [].concat((0, _toConsumableArray2["default"])(this._path), [responseKey]),
|
|
509
|
+
typeName: typeName,
|
|
510
|
+
variables: this._variables,
|
|
511
|
+
node: field,
|
|
512
|
+
actorIdentifier: actorIdentifier
|
|
513
|
+
});
|
|
514
|
+
};
|
|
515
|
+
|
|
444
516
|
_proto._normalizeFlightField = function _normalizeFlightField(parent, selection, record, data) {
|
|
445
517
|
var responseKey = selection.alias || selection.name;
|
|
446
518
|
var storageKey = getStorageKey(selection, this._variables);
|
|
447
519
|
var fieldValue = data[responseKey];
|
|
448
520
|
|
|
449
521
|
if (fieldValue == null) {
|
|
522
|
+
if (fieldValue === undefined) {
|
|
523
|
+
// Flight field may be missing in the response if:
|
|
524
|
+
// - It is inside an abstract type refinement where the concrete type does
|
|
525
|
+
// not conform to the interface/union.
|
|
526
|
+
// However an otherwise-required field may also be missing if the server
|
|
527
|
+
// is configured to skip fields with `null` values, in which case the
|
|
528
|
+
// client is assumed to be correctly configured with
|
|
529
|
+
// treatMissingFieldsAsNull=true.
|
|
530
|
+
if (this._isUnmatchedAbstractType) {
|
|
531
|
+
// Field not expected to exist regardless of whether the server is pruning null
|
|
532
|
+
// fields or not.
|
|
533
|
+
return;
|
|
534
|
+
} else {
|
|
535
|
+
// Not optional and the server is not pruning null fields: field is expected
|
|
536
|
+
// to be present
|
|
537
|
+
!this._treatMissingFieldsAsNull ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Payload did not contain a value for ' + 'field `%s: %s`. Check that you are parsing with the same ' + 'query that was used to fetch the payload.', responseKey, storageKey) : invariant(false) : void 0;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
|
|
450
541
|
RelayModernRecord.setValue(record, storageKey, null);
|
|
451
542
|
return;
|
|
452
543
|
}
|
|
453
544
|
|
|
454
545
|
var reactFlightPayload = refineToReactFlightPayloadData(fieldValue);
|
|
546
|
+
var reactFlightPayloadDeserializer = this._reactFlightPayloadDeserializer;
|
|
455
547
|
!(reactFlightPayload != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected React Flight payload data to be an ' + 'object with `status`, tree`, `queries` and `errors` properties, got ' + '`%s`.', fieldValue) : invariant(false) : void 0;
|
|
456
|
-
!(typeof
|
|
548
|
+
!(typeof reactFlightPayloadDeserializer === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected reactFlightPayloadDeserializer to ' + 'be a function, got `%s`.', reactFlightPayloadDeserializer) : invariant(false) : void 0;
|
|
457
549
|
|
|
458
550
|
if (reactFlightPayload.errors.length > 0) {
|
|
459
551
|
if (typeof this._reactFlightServerErrorHandler === 'function') {
|
|
@@ -461,22 +553,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
461
553
|
} else {
|
|
462
554
|
process.env.NODE_ENV !== "production" ? warning(false, 'RelayResponseNormalizer: Received server errors for field `%s`.\n\n' + '%s\n%s', responseKey, reactFlightPayload.errors[0].message, reactFlightPayload.errors[0].stack) : void 0;
|
|
463
555
|
}
|
|
464
|
-
}
|
|
465
|
-
// being written. When this occurs, we should not continue normalization of
|
|
466
|
-
// the Flight field because the row response is malformed.
|
|
467
|
-
//
|
|
468
|
-
// Receiving empty rows is OK because it can indicate the start of a stream.
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
if (reactFlightPayload.tree == null) {
|
|
472
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'RelayResponseNormalizer: Expected `tree` not to be null. This ' + 'typically indicates that a fatal server error prevented any Server ' + 'Component rows from being written.') : void 0;
|
|
473
|
-
return;
|
|
474
|
-
} // We store the deserialized reactFlightClientResponse in a separate
|
|
475
|
-
// record and link it to the parent record. This is so we can GC the Flight
|
|
476
|
-
// tree later even if the parent record is still reachable.
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
var reactFlightClientResponse = this._reactFlightPayloadDeserializer(reactFlightPayload.tree);
|
|
556
|
+
}
|
|
480
557
|
|
|
481
558
|
var reactFlightID = generateClientID(RelayModernRecord.getDataID(record), getStorageKey(selection, this._variables));
|
|
482
559
|
|
|
@@ -488,6 +565,25 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
488
565
|
this._recordSource.set(reactFlightID, reactFlightClientResponseRecord);
|
|
489
566
|
}
|
|
490
567
|
|
|
568
|
+
if (reactFlightPayload.tree == null) {
|
|
569
|
+
// This typically indicates that a fatal server error prevented rows from
|
|
570
|
+
// being written. When this occurs, we should not continue normalization of
|
|
571
|
+
// the Flight field because the row response is malformed.
|
|
572
|
+
//
|
|
573
|
+
// Receiving empty rows is OK because it can indicate the start of a stream.
|
|
574
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayResponseNormalizer: Expected `tree` not to be null. This ' + 'typically indicates that a fatal server error prevented any Server ' + 'Component rows from being written.') : void 0; // We create the flight record with a null value for the tree
|
|
575
|
+
// and empty reachable definitions
|
|
576
|
+
|
|
577
|
+
RelayModernRecord.setValue(reactFlightClientResponseRecord, REACT_FLIGHT_TREE_STORAGE_KEY, null);
|
|
578
|
+
RelayModernRecord.setValue(reactFlightClientResponseRecord, REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY, []);
|
|
579
|
+
RelayModernRecord.setLinkedRecordID(record, storageKey, reactFlightID);
|
|
580
|
+
return;
|
|
581
|
+
} // We store the deserialized reactFlightClientResponse in a separate
|
|
582
|
+
// record and link it to the parent record. This is so we can GC the Flight
|
|
583
|
+
// tree later even if the parent record is still reachable.
|
|
584
|
+
|
|
585
|
+
|
|
586
|
+
var reactFlightClientResponse = reactFlightPayloadDeserializer(reactFlightPayload.tree);
|
|
491
587
|
RelayModernRecord.setValue(reactFlightClientResponseRecord, REACT_FLIGHT_TREE_STORAGE_KEY, reactFlightClientResponse);
|
|
492
588
|
var reachableExecutableDefinitions = [];
|
|
493
589
|
|
|
@@ -499,13 +595,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
499
595
|
var query = _step.value;
|
|
500
596
|
|
|
501
597
|
if (query.response.data != null) {
|
|
502
|
-
this.
|
|
598
|
+
this._followupPayloads.push({
|
|
599
|
+
kind: 'ModuleImportPayload',
|
|
600
|
+
args: null,
|
|
503
601
|
data: query.response.data,
|
|
504
602
|
dataID: ROOT_ID,
|
|
505
603
|
operationReference: query.module,
|
|
506
604
|
path: [],
|
|
507
605
|
typeName: ROOT_TYPE,
|
|
508
|
-
variables: query.variables
|
|
606
|
+
variables: query.variables,
|
|
607
|
+
actorIdentifier: this._actorIdentifier
|
|
509
608
|
});
|
|
510
609
|
}
|
|
511
610
|
|
|
@@ -528,13 +627,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
528
627
|
var fragment = _step2.value;
|
|
529
628
|
|
|
530
629
|
if (fragment.response.data != null) {
|
|
531
|
-
this.
|
|
630
|
+
this._followupPayloads.push({
|
|
631
|
+
kind: 'ModuleImportPayload',
|
|
632
|
+
args: null,
|
|
532
633
|
data: fragment.response.data,
|
|
533
634
|
dataID: fragment.__id,
|
|
534
635
|
operationReference: fragment.module,
|
|
535
636
|
path: [],
|
|
536
637
|
typeName: fragment.__typename,
|
|
537
|
-
variables: fragment.variables
|
|
638
|
+
variables: fragment.variables,
|
|
639
|
+
actorIdentifier: this._actorIdentifier
|
|
538
640
|
});
|
|
539
641
|
}
|
|
540
642
|
|
|
@@ -554,12 +656,12 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
554
656
|
};
|
|
555
657
|
|
|
556
658
|
_proto._normalizeLink = function _normalizeLink(field, record, storageKey, fieldValue) {
|
|
557
|
-
var _field$
|
|
659
|
+
var _field$concreteType2;
|
|
558
660
|
|
|
559
661
|
!(typeof fieldValue === 'object' && fieldValue) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected data for field `%s` to be an object.', storageKey) : invariant(false) : void 0;
|
|
560
662
|
var nextID = this._getDataId( // $FlowFixMe[incompatible-variance]
|
|
561
663
|
fieldValue, // $FlowFixMe[incompatible-variance]
|
|
562
|
-
(_field$
|
|
664
|
+
(_field$concreteType2 = field.concreteType) !== null && _field$concreteType2 !== void 0 ? _field$concreteType2 : this._getRecordType(fieldValue)) || // Reuse previously generated client IDs
|
|
563
665
|
RelayModernRecord.getLinkedRecordID(record, storageKey) || generateClientID(RelayModernRecord.getDataID(record), storageKey);
|
|
564
666
|
!(typeof nextID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected id on field `%s` to be a string.', storageKey) : invariant(false) : void 0;
|
|
565
667
|
|
|
@@ -593,7 +695,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
593
695
|
var prevIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
594
696
|
var nextIDs = [];
|
|
595
697
|
fieldValue.forEach(function (item, nextIndex) {
|
|
596
|
-
var _field$
|
|
698
|
+
var _field$concreteType3;
|
|
597
699
|
|
|
598
700
|
// validate response data
|
|
599
701
|
if (item == null) {
|
|
@@ -606,7 +708,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
606
708
|
!(typeof item === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected elements for field `%s` to be ' + 'objects.', storageKey) : invariant(false) : void 0;
|
|
607
709
|
var nextID = _this._getDataId( // $FlowFixMe[incompatible-variance]
|
|
608
710
|
item, // $FlowFixMe[incompatible-variance]
|
|
609
|
-
(_field$
|
|
711
|
+
(_field$concreteType3 = field.concreteType) !== null && _field$concreteType3 !== void 0 ? _field$concreteType3 : _this._getRecordType(item)) || prevIDs && prevIDs[nextIndex] || // Reuse previously generated client IDs:
|
|
610
712
|
generateClientID(RelayModernRecord.getDataID(record), storageKey, nextIndex);
|
|
611
713
|
!(typeof nextID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected id of elements of field `%s` to ' + 'be strings.', storageKey) : invariant(false) : void 0;
|
|
612
714
|
nextIDs.push(nextID);
|
|
@@ -645,9 +747,9 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
645
747
|
;
|
|
646
748
|
|
|
647
749
|
_proto._validateRecordType = function _validateRecordType(record, field, payload) {
|
|
648
|
-
var _field$
|
|
750
|
+
var _field$concreteType4;
|
|
649
751
|
|
|
650
|
-
var typeName = (_field$
|
|
752
|
+
var typeName = (_field$concreteType4 = field.concreteType) !== null && _field$concreteType4 !== void 0 ? _field$concreteType4 : this._getRecordType(payload);
|
|
651
753
|
var dataID = RelayModernRecord.getDataID(record);
|
|
652
754
|
process.env.NODE_ENV !== "production" ? warning(isClientID(dataID) && dataID !== ROOT_ID || RelayModernRecord.getType(record) === typeName, 'RelayResponseNormalizer: Invalid record `%s`. Expected %s to be ' + 'consistent, but the record was assigned conflicting types `%s` ' + 'and `%s`. The GraphQL server likely violated the globally unique ' + 'id requirement by returning the same id for different objects.', dataID, TYPENAME_KEY, RelayModernRecord.getType(record), typeName) : void 0;
|
|
653
755
|
}
|
|
@@ -679,7 +781,6 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
679
781
|
return RelayResponseNormalizer;
|
|
680
782
|
}();
|
|
681
783
|
|
|
682
|
-
var instrumentedNormalize = RelayProfiler.instrument('RelayResponseNormalizer.normalize', normalize);
|
|
683
784
|
module.exports = {
|
|
684
|
-
normalize:
|
|
785
|
+
normalize: normalize
|
|
685
786
|
};
|
|
@@ -10,13 +10,13 @@
|
|
|
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('./RelayModernRecord'),
|
|
16
14
|
getType = _require.getType;
|
|
17
15
|
|
|
18
|
-
// Reachable (client) executable definitions encountered while server component
|
|
16
|
+
var invariant = require('invariant'); // Reachable (client) executable definitions encountered while server component
|
|
19
17
|
// rendering
|
|
18
|
+
|
|
19
|
+
|
|
20
20
|
var REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY = 'executableDefinitions';
|
|
21
21
|
var REACT_FLIGHT_TREE_STORAGE_KEY = 'tree';
|
|
22
22
|
var REACT_FLIGHT_TYPE_NAME = 'ReactFlightComponent';
|
|
@@ -31,13 +31,7 @@ function refineToReactFlightPayloadData(payload) {
|
|
|
31
31
|
|
|
32
32
|
function getReactFlightClientResponse(record) {
|
|
33
33
|
!(getType(record) === REACT_FLIGHT_TYPE_NAME) ? process.env.NODE_ENV !== "production" ? invariant(false, 'getReactFlightClientResponse(): Expected a ReactFlightComponentRecord, ' + 'got %s.', record) : invariant(false) : void 0;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (response != null) {
|
|
37
|
-
return response;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
return null;
|
|
34
|
+
return record[REACT_FLIGHT_TREE_STORAGE_KEY];
|
|
41
35
|
}
|
|
42
36
|
|
|
43
37
|
module.exports = {
|
|
@@ -10,20 +10,21 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var deepFreeze = require('../util/deepFreeze');
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var recycleNodesInto = require('../util/recycleNodesInto');
|
|
16
16
|
|
|
17
|
-
var
|
|
17
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
18
18
|
|
|
19
19
|
var hasOverlappingIDs = require('./hasOverlappingIDs');
|
|
20
20
|
|
|
21
|
-
var
|
|
21
|
+
var RelayReader = require('./RelayReader');
|
|
22
22
|
|
|
23
23
|
var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
24
|
-
function RelayStoreSubscriptions(log) {
|
|
24
|
+
function RelayStoreSubscriptions(log, resolverCache) {
|
|
25
25
|
this._subscriptions = new Set();
|
|
26
26
|
this.__log = log;
|
|
27
|
+
this._resolverCache = resolverCache;
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
var _proto = RelayStoreSubscriptions.prototype;
|
|
@@ -50,6 +51,8 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
50
51
|
};
|
|
51
52
|
|
|
52
53
|
_proto.snapshotSubscriptions = function snapshotSubscriptions(source) {
|
|
54
|
+
var _this2 = this;
|
|
55
|
+
|
|
53
56
|
this._subscriptions.forEach(function (subscription) {
|
|
54
57
|
// Backup occurs after writing a new "final" payload(s) and before (re)applying
|
|
55
58
|
// optimistic changes. Each subscription's `snapshot` represents what was *last
|
|
@@ -69,7 +72,7 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
69
72
|
}
|
|
70
73
|
|
|
71
74
|
var snapshot = subscription.snapshot;
|
|
72
|
-
var backup = RelayReader.read(source, snapshot.selector);
|
|
75
|
+
var backup = RelayReader.read(source, snapshot.selector, _this2._resolverCache);
|
|
73
76
|
var nextData = recycleNodesInto(snapshot.data, backup.data);
|
|
74
77
|
backup.data = nextData; // backup owns the snapshot and can safely mutate
|
|
75
78
|
|
|
@@ -90,6 +93,7 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
90
93
|
subscription.snapshot = {
|
|
91
94
|
data: subscription.snapshot.data,
|
|
92
95
|
isMissingData: backup.isMissingData,
|
|
96
|
+
missingClientEdges: backup.missingClientEdges,
|
|
93
97
|
seenRecords: backup.seenRecords,
|
|
94
98
|
selector: backup.selector,
|
|
95
99
|
missingRequiredFields: backup.missingRequiredFields
|
|
@@ -101,12 +105,12 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
101
105
|
};
|
|
102
106
|
|
|
103
107
|
_proto.updateSubscriptions = function updateSubscriptions(source, updatedRecordIDs, updatedOwners, sourceOperation) {
|
|
104
|
-
var
|
|
108
|
+
var _this3 = this;
|
|
105
109
|
|
|
106
110
|
var hasUpdatedRecords = updatedRecordIDs.size !== 0;
|
|
107
111
|
|
|
108
112
|
this._subscriptions.forEach(function (subscription) {
|
|
109
|
-
var owner =
|
|
113
|
+
var owner = _this3._updateSubscription(source, subscription, updatedRecordIDs, hasUpdatedRecords, sourceOperation);
|
|
110
114
|
|
|
111
115
|
if (owner != null) {
|
|
112
116
|
updatedOwners.push(owner);
|
|
@@ -134,11 +138,12 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
134
138
|
return;
|
|
135
139
|
}
|
|
136
140
|
|
|
137
|
-
var nextSnapshot = hasOverlappingUpdates || !backup ? RelayReader.read(source, snapshot.selector) : backup;
|
|
141
|
+
var nextSnapshot = hasOverlappingUpdates || !backup ? RelayReader.read(source, snapshot.selector, this._resolverCache) : backup;
|
|
138
142
|
var nextData = recycleNodesInto(snapshot.data, nextSnapshot.data);
|
|
139
143
|
nextSnapshot = {
|
|
140
144
|
data: nextData,
|
|
141
145
|
isMissingData: nextSnapshot.isMissingData,
|
|
146
|
+
missingClientEdges: nextSnapshot.missingClientEdges,
|
|
142
147
|
seenRecords: nextSnapshot.seenRecords,
|
|
143
148
|
selector: nextSnapshot.selector,
|
|
144
149
|
missingRequiredFields: nextSnapshot.missingRequiredFields
|