relay-runtime 11.0.2 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/index.js.flow +16 -1
- package/lib/index.js +15 -0
- package/lib/multi-actor-environment/ActorIdentifier.js +11 -1
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +59 -19
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +305 -55
- package/lib/multi-actor-environment/index.js +5 -1
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +6 -1
- package/lib/mutations/commitMutation.js +4 -1
- package/lib/mutations/validateMutation.js +6 -1
- package/lib/network/RelayObservable.js +3 -1
- package/lib/network/RelayQueryResponseCache.js +19 -3
- package/lib/network/wrapNetworkWithLogObserver.js +78 -0
- package/lib/store/DataChecker.js +110 -40
- package/lib/store/OperationExecutor.js +478 -204
- package/lib/store/RelayConcreteVariables.js +21 -0
- package/lib/store/RelayModernEnvironment.js +41 -85
- package/lib/store/RelayModernFragmentSpecResolver.js +48 -22
- package/lib/store/RelayModernRecord.js +35 -1
- package/lib/store/RelayModernStore.js +48 -14
- package/lib/store/RelayOperationTracker.js +33 -23
- package/lib/store/RelayPublishQueue.js +23 -5
- package/lib/store/RelayReader.js +138 -44
- package/lib/store/RelayRecordSource.js +87 -3
- package/lib/store/RelayReferenceMarker.js +28 -15
- package/lib/store/RelayResponseNormalizer.js +164 -91
- package/lib/store/RelayStoreReactFlightUtils.js +1 -7
- package/lib/store/RelayStoreSubscriptions.js +8 -5
- package/lib/store/RelayStoreUtils.js +7 -2
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +1 -1
- package/lib/store/createRelayContext.js +1 -1
- package/lib/subscription/requestSubscription.js +27 -29
- package/lib/util/RelayConcreteNode.js +1 -0
- package/lib/util/RelayFeatureFlags.js +3 -5
- package/lib/util/RelayReplaySubject.js +21 -6
- package/lib/util/getPaginationMetadata.js +41 -0
- package/lib/util/getPaginationVariables.js +67 -0
- package/lib/util/getPendingOperationsForFragment.js +55 -0
- package/lib/util/getRefetchMetadata.js +36 -0
- 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 +17 -1
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +72 -44
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +332 -80
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +61 -12
- package/multi-actor-environment/index.js.flow +3 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +7 -2
- package/mutations/commitMutation.js.flow +2 -0
- package/mutations/validateMutation.js.flow +8 -0
- package/network/RelayObservable.js.flow +2 -0
- package/network/RelayQueryResponseCache.js.flow +31 -18
- package/network/wrapNetworkWithLogObserver.js.flow +99 -0
- package/package.json +1 -1
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +5 -1
- package/store/DataChecker.js.flow +126 -35
- package/store/OperationExecutor.js.flow +528 -265
- package/store/RelayConcreteVariables.js.flow +26 -1
- package/store/RelayModernEnvironment.js.flow +41 -94
- package/store/RelayModernFragmentSpecResolver.js.flow +40 -14
- package/store/RelayModernOperationDescriptor.js.flow +9 -3
- package/store/RelayModernRecord.js.flow +49 -0
- package/store/RelayModernStore.js.flow +50 -12
- package/store/RelayOperationTracker.js.flow +56 -34
- package/store/RelayPublishQueue.js.flow +31 -8
- package/store/RelayReader.js.flow +148 -42
- package/store/RelayRecordSource.js.flow +72 -6
- package/store/RelayReferenceMarker.js.flow +29 -12
- package/store/RelayResponseNormalizer.js.flow +164 -48
- package/store/RelayStoreReactFlightUtils.js.flow +1 -7
- package/store/RelayStoreSubscriptions.js.flow +10 -3
- package/store/RelayStoreTypes.js.flow +128 -12
- package/store/RelayStoreUtils.js.flow +17 -3
- package/store/ResolverCache.js.flow +247 -0
- package/store/ResolverFragments.js.flow +6 -3
- package/store/createRelayContext.js.flow +1 -1
- package/subscription/requestSubscription.js.flow +41 -29
- package/util/NormalizationNode.js.flow +10 -3
- package/util/ReaderNode.js.flow +15 -1
- package/util/RelayConcreteNode.js.flow +1 -0
- package/util/RelayFeatureFlags.js.flow +8 -10
- package/util/RelayReplaySubject.js.flow +7 -6
- package/util/getPaginationMetadata.js.flow +74 -0
- package/util/getPaginationVariables.js.flow +112 -0
- package/util/getPendingOperationsForFragment.js.flow +62 -0
- package/util/getRefetchMetadata.js.flow +80 -0
- package/util/getValueAtPath.js.flow +46 -0
- package/util/isEmptyObject.js.flow +1 -0
- package/util/registerEnvironmentWithDevTools.js.flow +33 -0
- 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
|
@@ -30,10 +30,14 @@ var getOperation = require('../util/getOperation');
|
|
|
30
30
|
|
|
31
31
|
var invariant = require('invariant');
|
|
32
32
|
|
|
33
|
-
var _require = require('./
|
|
34
|
-
|
|
33
|
+
var _require = require('./RelayConcreteVariables'),
|
|
34
|
+
getLocalVariables = _require.getLocalVariables;
|
|
35
35
|
|
|
36
|
-
var
|
|
36
|
+
var _require2 = require('./TypeID'),
|
|
37
|
+
generateTypeID = _require2.generateTypeID;
|
|
38
|
+
|
|
39
|
+
var ACTOR_CHANGE = RelayConcreteNode.ACTOR_CHANGE,
|
|
40
|
+
CONDITION = RelayConcreteNode.CONDITION,
|
|
37
41
|
CLIENT_COMPONENT = RelayConcreteNode.CLIENT_COMPONENT,
|
|
38
42
|
CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
|
|
39
43
|
DEFER = RelayConcreteNode.DEFER,
|
|
@@ -107,6 +111,12 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
107
111
|
selections.forEach(function (selection) {
|
|
108
112
|
/* eslint-disable no-fallthrough */
|
|
109
113
|
switch (selection.kind) {
|
|
114
|
+
case ACTOR_CHANGE:
|
|
115
|
+
// TODO: T89695151 Support multi-actor record sources in RelayReferenceMarker.js
|
|
116
|
+
_this._traverseLink(selection.linkedField, record);
|
|
117
|
+
|
|
118
|
+
break;
|
|
119
|
+
|
|
110
120
|
case LINKED_FIELD:
|
|
111
121
|
if (selection.plural) {
|
|
112
122
|
_this._traversePluralLink(selection, record);
|
|
@@ -117,7 +127,7 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
117
127
|
break;
|
|
118
128
|
|
|
119
129
|
case CONDITION:
|
|
120
|
-
var conditionValue = _this._getVariableValue(selection.condition);
|
|
130
|
+
var conditionValue = Boolean(_this._getVariableValue(selection.condition));
|
|
121
131
|
|
|
122
132
|
if (conditionValue === selection.passingValue) {
|
|
123
133
|
_this._traverseSelections(selection.selections, record);
|
|
@@ -132,24 +142,25 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
132
142
|
if (typeName != null && typeName === selection.type) {
|
|
133
143
|
_this._traverseSelections(selection.selections, record);
|
|
134
144
|
}
|
|
135
|
-
} else
|
|
145
|
+
} else {
|
|
136
146
|
var _typeName = RelayModernRecord.getType(record);
|
|
137
147
|
|
|
138
148
|
var typeID = generateTypeID(_typeName);
|
|
139
149
|
|
|
140
150
|
_this._references.add(typeID);
|
|
141
151
|
|
|
142
|
-
_this._traverseSelections(selection.selections, record);
|
|
143
|
-
} else {
|
|
144
152
|
_this._traverseSelections(selection.selections, record);
|
|
145
153
|
}
|
|
146
154
|
|
|
147
155
|
break;
|
|
148
|
-
// $FlowFixMe[incompatible-type]
|
|
149
156
|
|
|
150
157
|
case FRAGMENT_SPREAD:
|
|
158
|
+
var prevVariables = _this._variables;
|
|
159
|
+
_this._variables = getLocalVariables(_this._variables, selection.fragment.argumentDefinitions, selection.args);
|
|
160
|
+
|
|
151
161
|
_this._traverseSelections(selection.fragment.selections, record);
|
|
152
162
|
|
|
163
|
+
_this._variables = prevVariables;
|
|
153
164
|
break;
|
|
154
165
|
|
|
155
166
|
case LINKED_HANDLE:
|
|
@@ -184,13 +195,11 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
184
195
|
|
|
185
196
|
case TYPE_DISCRIMINATOR:
|
|
186
197
|
{
|
|
187
|
-
|
|
188
|
-
var _typeName2 = RelayModernRecord.getType(record);
|
|
198
|
+
var _typeName2 = RelayModernRecord.getType(record);
|
|
189
199
|
|
|
190
|
-
|
|
200
|
+
var _typeID = generateTypeID(_typeName2);
|
|
191
201
|
|
|
192
|
-
|
|
193
|
-
}
|
|
202
|
+
_this._references.add(_typeID);
|
|
194
203
|
|
|
195
204
|
break;
|
|
196
205
|
}
|
|
@@ -245,9 +254,13 @@ var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
|
245
254
|
var normalizationRootNode = operationLoader.get(operationReference);
|
|
246
255
|
|
|
247
256
|
if (normalizationRootNode != null) {
|
|
248
|
-
var
|
|
257
|
+
var operation = getOperation(normalizationRootNode);
|
|
258
|
+
var prevVariables = this._variables;
|
|
259
|
+
this._variables = getLocalVariables(this._variables, operation.argumentDefinitions, moduleImport.args);
|
|
260
|
+
|
|
261
|
+
this._traverseSelections(operation.selections, record);
|
|
249
262
|
|
|
250
|
-
this.
|
|
263
|
+
this._variables = prevVariables;
|
|
251
264
|
} // Otherwise, if the operation is not available, we assume that the data
|
|
252
265
|
// cannot have been processed yet and therefore isn't in the store to
|
|
253
266
|
// begin with.
|
|
@@ -26,48 +26,56 @@ var invariant = require('invariant');
|
|
|
26
26
|
|
|
27
27
|
var warning = require("fbjs/lib/warning");
|
|
28
28
|
|
|
29
|
-
var _require = require('../
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
29
|
+
var _require = require('../multi-actor-environment/ActorUtils'),
|
|
30
|
+
ACTOR_IDENTIFIER_FIELD_NAME = _require.ACTOR_IDENTIFIER_FIELD_NAME,
|
|
31
|
+
getActorIdentifierFromPayload = _require.getActorIdentifierFromPayload;
|
|
32
|
+
|
|
33
|
+
var _require2 = require('../util/RelayConcreteNode'),
|
|
34
|
+
ACTOR_CHANGE = _require2.ACTOR_CHANGE,
|
|
35
|
+
CONDITION = _require2.CONDITION,
|
|
36
|
+
CLIENT_COMPONENT = _require2.CLIENT_COMPONENT,
|
|
37
|
+
CLIENT_EXTENSION = _require2.CLIENT_EXTENSION,
|
|
38
|
+
DEFER = _require2.DEFER,
|
|
39
|
+
FLIGHT_FIELD = _require2.FLIGHT_FIELD,
|
|
40
|
+
FRAGMENT_SPREAD = _require2.FRAGMENT_SPREAD,
|
|
41
|
+
INLINE_FRAGMENT = _require2.INLINE_FRAGMENT,
|
|
42
|
+
LINKED_FIELD = _require2.LINKED_FIELD,
|
|
43
|
+
LINKED_HANDLE = _require2.LINKED_HANDLE,
|
|
44
|
+
MODULE_IMPORT = _require2.MODULE_IMPORT,
|
|
45
|
+
SCALAR_FIELD = _require2.SCALAR_FIELD,
|
|
46
|
+
SCALAR_HANDLE = _require2.SCALAR_HANDLE,
|
|
47
|
+
STREAM = _require2.STREAM,
|
|
48
|
+
TYPE_DISCRIMINATOR = _require2.TYPE_DISCRIMINATOR;
|
|
49
|
+
|
|
50
|
+
var _require3 = require('./ClientID'),
|
|
51
|
+
generateClientID = _require3.generateClientID,
|
|
52
|
+
isClientID = _require3.isClientID;
|
|
53
|
+
|
|
54
|
+
var _require4 = require('./RelayConcreteVariables'),
|
|
55
|
+
getLocalVariables = _require4.getLocalVariables;
|
|
56
|
+
|
|
57
|
+
var _require5 = require('./RelayModernSelector'),
|
|
58
|
+
createNormalizationSelector = _require5.createNormalizationSelector;
|
|
59
|
+
|
|
60
|
+
var _require6 = require('./RelayStoreReactFlightUtils'),
|
|
61
|
+
refineToReactFlightPayloadData = _require6.refineToReactFlightPayloadData,
|
|
62
|
+
REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY = _require6.REACT_FLIGHT_EXECUTABLE_DEFINITIONS_STORAGE_KEY,
|
|
63
|
+
REACT_FLIGHT_TREE_STORAGE_KEY = _require6.REACT_FLIGHT_TREE_STORAGE_KEY,
|
|
64
|
+
REACT_FLIGHT_TYPE_NAME = _require6.REACT_FLIGHT_TYPE_NAME;
|
|
65
|
+
|
|
66
|
+
var _require7 = require('./RelayStoreUtils'),
|
|
67
|
+
getArgumentValues = _require7.getArgumentValues,
|
|
68
|
+
getHandleStorageKey = _require7.getHandleStorageKey,
|
|
69
|
+
getModuleComponentKey = _require7.getModuleComponentKey,
|
|
70
|
+
getModuleOperationKey = _require7.getModuleOperationKey,
|
|
71
|
+
getStorageKey = _require7.getStorageKey,
|
|
72
|
+
TYPENAME_KEY = _require7.TYPENAME_KEY,
|
|
73
|
+
ROOT_ID = _require7.ROOT_ID,
|
|
74
|
+
ROOT_TYPE = _require7.ROOT_TYPE;
|
|
75
|
+
|
|
76
|
+
var _require8 = require('./TypeID'),
|
|
77
|
+
generateTypeID = _require8.generateTypeID,
|
|
78
|
+
TYPE_SCHEMA_TYPE = _require8.TYPE_SCHEMA_TYPE;
|
|
71
79
|
|
|
72
80
|
/**
|
|
73
81
|
* Normalizes the results of a query and standard GraphQL response, writing the
|
|
@@ -89,13 +97,14 @@ function normalize(recordSource, selector, response, options) {
|
|
|
89
97
|
|
|
90
98
|
var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
91
99
|
function RelayResponseNormalizer(recordSource, variables, options) {
|
|
100
|
+
this._actorIdentifier = options.actorIdentifier;
|
|
92
101
|
this._getDataId = options.getDataID;
|
|
93
102
|
this._handleFieldPayloads = [];
|
|
94
103
|
this._treatMissingFieldsAsNull = options.treatMissingFieldsAsNull;
|
|
95
104
|
this._incrementalPlaceholders = [];
|
|
96
105
|
this._isClientExtension = false;
|
|
97
106
|
this._isUnmatchedAbstractType = false;
|
|
98
|
-
this.
|
|
107
|
+
this._followupPayloads = [];
|
|
99
108
|
this._path = options.path ? (0, _toConsumableArray2["default"])(options.path) : [];
|
|
100
109
|
this._recordSource = recordSource;
|
|
101
110
|
this._variables = variables;
|
|
@@ -117,7 +126,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
117
126
|
errors: null,
|
|
118
127
|
fieldPayloads: this._handleFieldPayloads,
|
|
119
128
|
incrementalPlaceholders: this._incrementalPlaceholders,
|
|
120
|
-
|
|
129
|
+
followupPayloads: this._followupPayloads,
|
|
121
130
|
source: this._recordSource,
|
|
122
131
|
isFinal: false
|
|
123
132
|
};
|
|
@@ -147,7 +156,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
147
156
|
break;
|
|
148
157
|
|
|
149
158
|
case CONDITION:
|
|
150
|
-
var conditionValue = this._getVariableValue(selection.condition);
|
|
159
|
+
var conditionValue = Boolean(this._getVariableValue(selection.condition));
|
|
151
160
|
|
|
152
161
|
if (conditionValue === selection.passingValue) {
|
|
153
162
|
this._traverseSelections(selection, record, data);
|
|
@@ -157,8 +166,12 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
157
166
|
|
|
158
167
|
case FRAGMENT_SPREAD:
|
|
159
168
|
{
|
|
169
|
+
var prevVariables = this._variables;
|
|
170
|
+
this._variables = getLocalVariables(this._variables, selection.fragment.argumentDefinitions, selection.args);
|
|
171
|
+
|
|
160
172
|
this._traverseSelections(selection.fragment, record, data);
|
|
161
173
|
|
|
174
|
+
this._variables = prevVariables;
|
|
162
175
|
break;
|
|
163
176
|
}
|
|
164
177
|
|
|
@@ -172,7 +185,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
172
185
|
if (_typeName === selection.type) {
|
|
173
186
|
this._traverseSelections(selection, record, data);
|
|
174
187
|
}
|
|
175
|
-
} else
|
|
188
|
+
} else {
|
|
176
189
|
var implementsInterface = data.hasOwnProperty(abstractKey);
|
|
177
190
|
|
|
178
191
|
var _typeName2 = RelayModernRecord.getType(record);
|
|
@@ -192,18 +205,6 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
192
205
|
if (implementsInterface) {
|
|
193
206
|
this._traverseSelections(selection, record, data);
|
|
194
207
|
}
|
|
195
|
-
} else {
|
|
196
|
-
// legacy behavior for abstract refinements: always normalize even
|
|
197
|
-
// if the type doesn't conform, but track if the type matches or not
|
|
198
|
-
// for determining whether response fields are expected to be present
|
|
199
|
-
var _implementsInterface = data.hasOwnProperty(abstractKey);
|
|
200
|
-
|
|
201
|
-
var parentIsUnmatchedAbstractType = this._isUnmatchedAbstractType;
|
|
202
|
-
this._isUnmatchedAbstractType = this._isUnmatchedAbstractType || !_implementsInterface;
|
|
203
|
-
|
|
204
|
-
this._traverseSelections(selection, record, data);
|
|
205
|
-
|
|
206
|
-
this._isUnmatchedAbstractType = parentIsUnmatchedAbstractType;
|
|
207
208
|
}
|
|
208
209
|
|
|
209
210
|
break;
|
|
@@ -211,26 +212,23 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
211
212
|
|
|
212
213
|
case TYPE_DISCRIMINATOR:
|
|
213
214
|
{
|
|
214
|
-
|
|
215
|
-
var _abstractKey = selection.abstractKey;
|
|
216
|
-
|
|
217
|
-
var _implementsInterface2 = data.hasOwnProperty(_abstractKey);
|
|
215
|
+
var _abstractKey = selection.abstractKey;
|
|
218
216
|
|
|
219
|
-
|
|
217
|
+
var _implementsInterface = data.hasOwnProperty(_abstractKey);
|
|
220
218
|
|
|
221
|
-
|
|
219
|
+
var _typeName3 = RelayModernRecord.getType(record);
|
|
222
220
|
|
|
223
|
-
|
|
221
|
+
var _typeID = generateTypeID(_typeName3);
|
|
224
222
|
|
|
225
|
-
|
|
226
|
-
_typeRecord = RelayModernRecord.create(_typeID, TYPE_SCHEMA_TYPE);
|
|
223
|
+
var _typeRecord = this._recordSource.get(_typeID);
|
|
227
224
|
|
|
228
|
-
|
|
229
|
-
|
|
225
|
+
if (_typeRecord == null) {
|
|
226
|
+
_typeRecord = RelayModernRecord.create(_typeID, TYPE_SCHEMA_TYPE);
|
|
230
227
|
|
|
231
|
-
|
|
228
|
+
this._recordSource.set(_typeID, _typeRecord);
|
|
232
229
|
}
|
|
233
230
|
|
|
231
|
+
RelayModernRecord.setValue(_typeRecord, _abstractKey, _implementsInterface);
|
|
234
232
|
break;
|
|
235
233
|
}
|
|
236
234
|
|
|
@@ -241,12 +239,17 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
241
239
|
var handleKey = getHandleStorageKey(selection, this._variables);
|
|
242
240
|
|
|
243
241
|
this._handleFieldPayloads.push({
|
|
242
|
+
/* $FlowFixMe[class-object-subtyping] added when improving typing
|
|
243
|
+
* for this parameters */
|
|
244
244
|
args: args,
|
|
245
245
|
dataID: RelayModernRecord.getDataID(record),
|
|
246
246
|
fieldKey: fieldKey,
|
|
247
247
|
handle: selection.handle,
|
|
248
248
|
handleKey: handleKey,
|
|
249
|
-
handleArgs: selection.handleArgs ?
|
|
249
|
+
handleArgs: selection.handleArgs ?
|
|
250
|
+
/* $FlowFixMe[class-object-subtyping] added when improving typing
|
|
251
|
+
* for this parameters */
|
|
252
|
+
getArgumentValues(selection.handleArgs, this._variables) : {}
|
|
250
253
|
});
|
|
251
254
|
|
|
252
255
|
break;
|
|
@@ -293,6 +296,11 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
293
296
|
|
|
294
297
|
break;
|
|
295
298
|
|
|
299
|
+
case ACTOR_CHANGE:
|
|
300
|
+
this._normalizeActorChange(node, selection, record, data);
|
|
301
|
+
|
|
302
|
+
break;
|
|
303
|
+
|
|
296
304
|
default:
|
|
297
305
|
selection;
|
|
298
306
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
@@ -320,7 +328,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
320
328
|
label: defer.label,
|
|
321
329
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
322
330
|
selector: createNormalizationSelector(defer, RelayModernRecord.getDataID(record), this._variables),
|
|
323
|
-
typeName: RelayModernRecord.getType(record)
|
|
331
|
+
typeName: RelayModernRecord.getType(record),
|
|
332
|
+
actorIdentifier: this._actorIdentifier
|
|
324
333
|
});
|
|
325
334
|
}
|
|
326
335
|
};
|
|
@@ -346,7 +355,8 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
346
355
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
347
356
|
parentID: RelayModernRecord.getDataID(record),
|
|
348
357
|
node: stream,
|
|
349
|
-
variables: this._variables
|
|
358
|
+
variables: this._variables,
|
|
359
|
+
actorIdentifier: this._actorIdentifier
|
|
350
360
|
});
|
|
351
361
|
}
|
|
352
362
|
};
|
|
@@ -362,13 +372,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
362
372
|
RelayModernRecord.setValue(record, operationKey, operationReference !== null && operationReference !== void 0 ? operationReference : null);
|
|
363
373
|
|
|
364
374
|
if (operationReference != null) {
|
|
365
|
-
this.
|
|
375
|
+
this._followupPayloads.push({
|
|
376
|
+
kind: 'ModuleImportPayload',
|
|
377
|
+
args: moduleImport.args,
|
|
366
378
|
data: data,
|
|
367
379
|
dataID: RelayModernRecord.getDataID(record),
|
|
368
380
|
operationReference: operationReference,
|
|
369
381
|
path: (0, _toConsumableArray2["default"])(this._path),
|
|
370
382
|
typeName: typeName,
|
|
371
|
-
variables: this._variables
|
|
383
|
+
variables: this._variables,
|
|
384
|
+
actorIdentifier: this._actorIdentifier
|
|
372
385
|
});
|
|
373
386
|
}
|
|
374
387
|
};
|
|
@@ -439,6 +452,64 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
439
452
|
}
|
|
440
453
|
};
|
|
441
454
|
|
|
455
|
+
_proto._normalizeActorChange = function _normalizeActorChange(parent, selection, record, data) {
|
|
456
|
+
var _field$concreteType;
|
|
457
|
+
|
|
458
|
+
var field = selection.linkedField;
|
|
459
|
+
!(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;
|
|
460
|
+
var responseKey = field.alias || field.name;
|
|
461
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
462
|
+
var fieldValue = data[responseKey];
|
|
463
|
+
|
|
464
|
+
if (fieldValue == null) {
|
|
465
|
+
if (fieldValue === undefined) {
|
|
466
|
+
var isOptionalField = this._isClientExtension || this._isUnmatchedAbstractType;
|
|
467
|
+
|
|
468
|
+
if (isOptionalField) {
|
|
469
|
+
return;
|
|
470
|
+
} else if (!this._treatMissingFieldsAsNull) {
|
|
471
|
+
if (process.env.NODE_ENV !== "production") {
|
|
472
|
+
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;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
RelayModernRecord.setValue(record, storageKey, null);
|
|
480
|
+
return;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
var actorIdentifier = getActorIdentifierFromPayload(fieldValue);
|
|
484
|
+
|
|
485
|
+
if (actorIdentifier == null) {
|
|
486
|
+
if (process.env.NODE_ENV !== "production") {
|
|
487
|
+
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;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
RelayModernRecord.setValue(record, storageKey, null);
|
|
491
|
+
return;
|
|
492
|
+
} // $FlowFixMe[incompatible-call]
|
|
493
|
+
|
|
494
|
+
|
|
495
|
+
var typeName = (_field$concreteType = field.concreteType) !== null && _field$concreteType !== void 0 ? _field$concreteType : this._getRecordType(fieldValue);
|
|
496
|
+
var nextID = this._getDataId( // $FlowFixMe[incompatible-call]
|
|
497
|
+
fieldValue, typeName) || RelayModernRecord.getLinkedRecordID(record, storageKey) || generateClientID(RelayModernRecord.getDataID(record), storageKey);
|
|
498
|
+
!(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;
|
|
499
|
+
RelayModernRecord.setActorLinkedRecordID(record, storageKey, actorIdentifier, nextID);
|
|
500
|
+
|
|
501
|
+
this._followupPayloads.push({
|
|
502
|
+
kind: 'ActorPayload',
|
|
503
|
+
data: fieldValue,
|
|
504
|
+
dataID: nextID,
|
|
505
|
+
path: [].concat((0, _toConsumableArray2["default"])(this._path), [responseKey]),
|
|
506
|
+
typeName: typeName,
|
|
507
|
+
variables: this._variables,
|
|
508
|
+
node: field,
|
|
509
|
+
actorIdentifier: actorIdentifier
|
|
510
|
+
});
|
|
511
|
+
};
|
|
512
|
+
|
|
442
513
|
_proto._normalizeFlightField = function _normalizeFlightField(parent, selection, record, data) {
|
|
443
514
|
var responseKey = selection.alias || selection.name;
|
|
444
515
|
var storageKey = getStorageKey(selection, this._variables);
|
|
@@ -457,14 +528,10 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
457
528
|
// Field not expected to exist regardless of whether the server is pruning null
|
|
458
529
|
// fields or not.
|
|
459
530
|
return;
|
|
460
|
-
} else
|
|
531
|
+
} else {
|
|
461
532
|
// Not optional and the server is not pruning null fields: field is expected
|
|
462
533
|
// to be present
|
|
463
|
-
|
|
464
|
-
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;
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
return;
|
|
534
|
+
!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;
|
|
468
535
|
}
|
|
469
536
|
}
|
|
470
537
|
|
|
@@ -525,13 +592,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
525
592
|
var query = _step.value;
|
|
526
593
|
|
|
527
594
|
if (query.response.data != null) {
|
|
528
|
-
this.
|
|
595
|
+
this._followupPayloads.push({
|
|
596
|
+
kind: 'ModuleImportPayload',
|
|
597
|
+
args: null,
|
|
529
598
|
data: query.response.data,
|
|
530
599
|
dataID: ROOT_ID,
|
|
531
600
|
operationReference: query.module,
|
|
532
601
|
path: [],
|
|
533
602
|
typeName: ROOT_TYPE,
|
|
534
|
-
variables: query.variables
|
|
603
|
+
variables: query.variables,
|
|
604
|
+
actorIdentifier: this._actorIdentifier
|
|
535
605
|
});
|
|
536
606
|
}
|
|
537
607
|
|
|
@@ -554,13 +624,16 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
554
624
|
var fragment = _step2.value;
|
|
555
625
|
|
|
556
626
|
if (fragment.response.data != null) {
|
|
557
|
-
this.
|
|
627
|
+
this._followupPayloads.push({
|
|
628
|
+
kind: 'ModuleImportPayload',
|
|
629
|
+
args: null,
|
|
558
630
|
data: fragment.response.data,
|
|
559
631
|
dataID: fragment.__id,
|
|
560
632
|
operationReference: fragment.module,
|
|
561
633
|
path: [],
|
|
562
634
|
typeName: fragment.__typename,
|
|
563
|
-
variables: fragment.variables
|
|
635
|
+
variables: fragment.variables,
|
|
636
|
+
actorIdentifier: this._actorIdentifier
|
|
564
637
|
});
|
|
565
638
|
}
|
|
566
639
|
|
|
@@ -580,12 +653,12 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
580
653
|
};
|
|
581
654
|
|
|
582
655
|
_proto._normalizeLink = function _normalizeLink(field, record, storageKey, fieldValue) {
|
|
583
|
-
var _field$
|
|
656
|
+
var _field$concreteType2;
|
|
584
657
|
|
|
585
658
|
!(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;
|
|
586
659
|
var nextID = this._getDataId( // $FlowFixMe[incompatible-variance]
|
|
587
660
|
fieldValue, // $FlowFixMe[incompatible-variance]
|
|
588
|
-
(_field$
|
|
661
|
+
(_field$concreteType2 = field.concreteType) !== null && _field$concreteType2 !== void 0 ? _field$concreteType2 : this._getRecordType(fieldValue)) || // Reuse previously generated client IDs
|
|
589
662
|
RelayModernRecord.getLinkedRecordID(record, storageKey) || generateClientID(RelayModernRecord.getDataID(record), storageKey);
|
|
590
663
|
!(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;
|
|
591
664
|
|
|
@@ -619,7 +692,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
619
692
|
var prevIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
620
693
|
var nextIDs = [];
|
|
621
694
|
fieldValue.forEach(function (item, nextIndex) {
|
|
622
|
-
var _field$
|
|
695
|
+
var _field$concreteType3;
|
|
623
696
|
|
|
624
697
|
// validate response data
|
|
625
698
|
if (item == null) {
|
|
@@ -632,7 +705,7 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
632
705
|
!(typeof item === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected elements for field `%s` to be ' + 'objects.', storageKey) : invariant(false) : void 0;
|
|
633
706
|
var nextID = _this._getDataId( // $FlowFixMe[incompatible-variance]
|
|
634
707
|
item, // $FlowFixMe[incompatible-variance]
|
|
635
|
-
(_field$
|
|
708
|
+
(_field$concreteType3 = field.concreteType) !== null && _field$concreteType3 !== void 0 ? _field$concreteType3 : _this._getRecordType(item)) || prevIDs && prevIDs[nextIndex] || // Reuse previously generated client IDs:
|
|
636
709
|
generateClientID(RelayModernRecord.getDataID(record), storageKey, nextIndex);
|
|
637
710
|
!(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;
|
|
638
711
|
nextIDs.push(nextID);
|
|
@@ -671,9 +744,9 @@ var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
|
671
744
|
;
|
|
672
745
|
|
|
673
746
|
_proto._validateRecordType = function _validateRecordType(record, field, payload) {
|
|
674
|
-
var _field$
|
|
747
|
+
var _field$concreteType4;
|
|
675
748
|
|
|
676
|
-
var typeName = (_field$
|
|
749
|
+
var typeName = (_field$concreteType4 = field.concreteType) !== null && _field$concreteType4 !== void 0 ? _field$concreteType4 : this._getRecordType(payload);
|
|
677
750
|
var dataID = RelayModernRecord.getDataID(record);
|
|
678
751
|
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;
|
|
679
752
|
}
|
|
@@ -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 = {
|
|
@@ -21,9 +21,10 @@ var hasOverlappingIDs = require('./hasOverlappingIDs');
|
|
|
21
21
|
var recycleNodesInto = require('../util/recycleNodesInto');
|
|
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
|
|
|
@@ -101,12 +104,12 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
101
104
|
};
|
|
102
105
|
|
|
103
106
|
_proto.updateSubscriptions = function updateSubscriptions(source, updatedRecordIDs, updatedOwners, sourceOperation) {
|
|
104
|
-
var
|
|
107
|
+
var _this3 = this;
|
|
105
108
|
|
|
106
109
|
var hasUpdatedRecords = updatedRecordIDs.size !== 0;
|
|
107
110
|
|
|
108
111
|
this._subscriptions.forEach(function (subscription) {
|
|
109
|
-
var owner =
|
|
112
|
+
var owner = _this3._updateSubscription(source, subscription, updatedRecordIDs, hasUpdatedRecords, sourceOperation);
|
|
110
113
|
|
|
111
114
|
if (owner != null) {
|
|
112
115
|
updatedOwners.push(owner);
|
|
@@ -134,7 +137,7 @@ var RelayStoreSubscriptions = /*#__PURE__*/function () {
|
|
|
134
137
|
return;
|
|
135
138
|
}
|
|
136
139
|
|
|
137
|
-
var nextSnapshot = hasOverlappingUpdates || !backup ? RelayReader.read(source, snapshot.selector) : backup;
|
|
140
|
+
var nextSnapshot = hasOverlappingUpdates || !backup ? RelayReader.read(source, snapshot.selector, this._resolverCache) : backup;
|
|
138
141
|
var nextData = recycleNodesInto(snapshot.data, nextSnapshot.data);
|
|
139
142
|
nextSnapshot = {
|
|
140
143
|
data: nextData,
|
|
@@ -122,8 +122,8 @@ function getStorageKey(field, variables) {
|
|
|
122
122
|
return field.storageKey;
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
var args = field.args
|
|
126
|
-
|
|
125
|
+
var args = typeof field.args === 'undefined' ? undefined : field.args;
|
|
126
|
+
var name = field.name;
|
|
127
127
|
return args && args.length !== 0 ? formatStorageKey(name, getArgumentValues(args, variables)) : name;
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
@@ -193,6 +193,7 @@ function getModuleOperationKey(documentName) {
|
|
|
193
193
|
|
|
194
194
|
|
|
195
195
|
var RelayStoreUtils = {
|
|
196
|
+
ACTOR_IDENTIFIER_KEY: '__actorIdentifier',
|
|
196
197
|
FRAGMENTS_KEY: '__fragments',
|
|
197
198
|
FRAGMENT_OWNER_KEY: '__fragmentOwner',
|
|
198
199
|
FRAGMENT_PROP_NAME_KEY: '__fragmentPropName',
|
|
@@ -206,6 +207,10 @@ var RelayStoreUtils = {
|
|
|
206
207
|
TYPENAME_KEY: '__typename',
|
|
207
208
|
INVALIDATED_AT_KEY: '__invalidated_at',
|
|
208
209
|
IS_WITHIN_UNMATCHED_TYPE_REFINEMENT: '__isWithinUnmatchedTypeRefinement',
|
|
210
|
+
RELAY_RESOLVER_VALUE_KEY: '__resolverValue',
|
|
211
|
+
RELAY_RESOLVER_INVALIDATION_KEY: '__resolverValueMayBeInvalid',
|
|
212
|
+
RELAY_RESOLVER_INPUTS_KEY: '__resolverInputValues',
|
|
213
|
+
RELAY_RESOLVER_READER_SELECTOR_KEY: '__resolverReaderSelector',
|
|
209
214
|
formatStorageKey: formatStorageKey,
|
|
210
215
|
getArgumentValue: getArgumentValue,
|
|
211
216
|
getArgumentValues: getArgumentValues,
|