relay-runtime 7.0.0 → 9.1.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/handlers/RelayDefaultHandlerProvider.js.flow +34 -0
- package/handlers/connection/ConnectionHandler.js.flow +549 -0
- package/handlers/connection/ConnectionInterface.js.flow +92 -0
- package/index.js +1 -1
- package/index.js.flow +314 -0
- package/lib/handlers/RelayDefaultHandlerProvider.js +3 -2
- package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +34 -35
- package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +3 -30
- package/lib/index.js +29 -27
- package/lib/mutations/RelayDeclarativeMutationConfig.js +30 -52
- package/lib/mutations/RelayRecordProxy.js +6 -3
- package/lib/mutations/RelayRecordSourceMutator.js +3 -9
- package/lib/mutations/RelayRecordSourceProxy.js +21 -24
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +18 -14
- package/lib/mutations/applyOptimisticMutation.js +2 -1
- package/lib/mutations/commitLocalUpdate.js +1 -0
- package/lib/mutations/commitMutation.js +26 -8
- package/lib/mutations/validateMutation.js +21 -11
- package/lib/network/ConvertToExecuteFunction.js +1 -0
- package/lib/network/RelayNetwork.js +1 -0
- package/lib/network/RelayNetworkTypes.js +1 -0
- package/lib/network/RelayObservable.js +10 -9
- package/lib/network/RelayQueryResponseCache.js +9 -7
- package/lib/query/{RelayModernGraphQLTag.js → GraphQLTag.js} +15 -8
- package/lib/query/fetchQuery.js +2 -1
- package/lib/query/fetchQueryInternal.js +30 -20
- package/lib/store/ClientID.js +1 -0
- package/lib/store/DataChecker.js +47 -97
- package/lib/store/RelayConcreteVariables.js +7 -2
- package/lib/store/RelayModernEnvironment.js +82 -41
- package/lib/store/RelayModernFragmentSpecResolver.js +61 -21
- package/lib/store/RelayModernOperationDescriptor.js +2 -1
- package/lib/store/RelayModernQueryExecutor.js +476 -333
- package/lib/store/RelayModernRecord.js +39 -9
- package/lib/store/RelayModernSelector.js +2 -1
- package/lib/store/RelayModernStore.js +359 -371
- package/lib/store/RelayOperationTracker.js +36 -78
- package/lib/store/RelayOptimisticRecordSource.js +8 -5
- package/lib/store/RelayPublishQueue.js +66 -53
- package/lib/store/RelayReader.js +2 -24
- package/lib/store/RelayRecordSource.js +3 -9
- package/lib/store/RelayRecordSourceMapImpl.js +14 -18
- package/lib/store/RelayRecordState.js +1 -0
- package/lib/store/RelayReferenceMarker.js +8 -58
- package/lib/store/RelayResponseNormalizer.js +15 -144
- package/lib/store/RelayStoreTypes.js +1 -0
- package/lib/store/RelayStoreUtils.js +34 -10
- package/lib/store/StoreInspector.js +11 -5
- package/lib/store/ViewerPattern.js +1 -0
- package/lib/store/cloneRelayHandleSourceField.js +1 -0
- package/lib/store/createFragmentSpecResolver.js +1 -0
- package/lib/store/createRelayContext.js +1 -0
- package/lib/store/defaultGetDataID.js +1 -0
- package/lib/store/hasOverlappingIDs.js +1 -0
- package/lib/store/isRelayModernEnvironment.js +1 -0
- package/lib/store/normalizeRelayPayload.js +8 -4
- package/lib/store/readInlineData.js +2 -1
- package/lib/subscription/requestSubscription.js +6 -3
- package/lib/util/JSResourceTypes.flow.js +12 -0
- package/lib/util/NormalizationNode.js +1 -0
- package/lib/util/ReaderNode.js +1 -0
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayDefaultHandleKey.js +1 -0
- package/lib/util/RelayError.js +2 -1
- package/lib/util/RelayFeatureFlags.js +3 -2
- package/lib/util/RelayProfiler.js +1 -0
- package/lib/util/RelayReplaySubject.js +2 -3
- package/lib/util/RelayRuntimeTypes.js +1 -0
- package/lib/util/createPayloadFor3DField.js +34 -0
- package/lib/util/deepFreeze.js +1 -0
- package/lib/util/generateID.js +1 -0
- package/lib/util/getFragmentIdentifier.js +1 -0
- package/lib/util/getRelayHandleKey.js +1 -0
- package/lib/util/getRequestIdentifier.js +1 -0
- package/lib/util/isPromise.js +1 -0
- package/lib/util/isScalarAndEqual.js +1 -0
- package/lib/util/recycleNodesInto.js +1 -0
- package/lib/util/resolveImmediate.js +1 -0
- package/lib/util/stableCopy.js +1 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
- package/mutations/RelayRecordProxy.js.flow +165 -0
- package/mutations/RelayRecordSourceMutator.js.flow +238 -0
- package/mutations/RelayRecordSourceProxy.js.flow +164 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
- package/mutations/applyOptimisticMutation.js.flow +76 -0
- package/mutations/commitLocalUpdate.js.flow +24 -0
- package/mutations/commitMutation.js.flow +184 -0
- package/mutations/validateMutation.js.flow +211 -0
- package/network/ConvertToExecuteFunction.js.flow +49 -0
- package/network/RelayNetwork.js.flow +84 -0
- package/network/RelayNetworkTypes.js.flow +123 -0
- package/network/RelayObservable.js.flow +634 -0
- package/network/RelayQueryResponseCache.js.flow +111 -0
- package/package.json +1 -1
- package/query/GraphQLTag.js.flow +166 -0
- package/query/fetchQuery.js.flow +47 -0
- package/query/fetchQueryInternal.js.flow +349 -0
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +43 -0
- package/store/DataChecker.js.flow +426 -0
- package/store/RelayConcreteVariables.js.flow +96 -0
- package/store/RelayModernEnvironment.js.flow +526 -0
- package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
- package/store/RelayModernOperationDescriptor.js.flow +88 -0
- package/store/RelayModernQueryExecutor.js.flow +1327 -0
- package/store/RelayModernRecord.js.flow +403 -0
- package/store/RelayModernSelector.js.flow +444 -0
- package/store/RelayModernStore.js.flow +757 -0
- package/store/RelayOperationTracker.js.flow +164 -0
- package/store/RelayOptimisticRecordSource.js.flow +119 -0
- package/store/RelayPublishQueue.js.flow +401 -0
- package/store/RelayReader.js.flow +376 -0
- package/store/RelayRecordSource.js.flow +29 -0
- package/store/RelayRecordSourceMapImpl.js.flow +87 -0
- package/store/RelayRecordState.js.flow +37 -0
- package/store/RelayReferenceMarker.js.flow +236 -0
- package/store/RelayResponseNormalizer.js.flow +556 -0
- package/store/RelayStoreTypes.js.flow +873 -0
- package/store/RelayStoreUtils.js.flow +218 -0
- package/store/StoreInspector.js.flow +173 -0
- package/store/ViewerPattern.js.flow +26 -0
- package/store/cloneRelayHandleSourceField.js.flow +66 -0
- package/store/createFragmentSpecResolver.js.flow +55 -0
- package/store/createRelayContext.js.flow +44 -0
- package/store/defaultGetDataID.js.flow +27 -0
- package/store/hasOverlappingIDs.js.flow +34 -0
- package/store/isRelayModernEnvironment.js.flow +27 -0
- package/store/normalizeRelayPayload.js.flow +51 -0
- package/store/readInlineData.js.flow +75 -0
- package/subscription/requestSubscription.js.flow +100 -0
- package/util/JSResourceTypes.flow.js.flow +20 -0
- package/util/NormalizationNode.js.flow +191 -0
- package/util/ReaderNode.js.flow +208 -0
- package/util/RelayConcreteNode.js.flow +80 -0
- package/util/RelayDefaultHandleKey.js.flow +17 -0
- package/util/RelayError.js.flow +33 -0
- package/util/RelayFeatureFlags.js.flow +30 -0
- package/util/RelayProfiler.js.flow +284 -0
- package/util/RelayReplaySubject.js.flow +134 -0
- package/util/RelayRuntimeTypes.js.flow +70 -0
- package/util/createPayloadFor3DField.js.flow +43 -0
- package/util/deepFreeze.js.flow +36 -0
- package/util/generateID.js.flow +21 -0
- package/util/getFragmentIdentifier.js.flow +52 -0
- package/util/getRelayHandleKey.js.flow +41 -0
- package/util/getRequestIdentifier.js.flow +41 -0
- package/util/isPromise.js.flow +21 -0
- package/util/isScalarAndEqual.js.flow +26 -0
- package/util/recycleNodesInto.js.flow +80 -0
- package/util/resolveImmediate.js.flow +30 -0
- package/util/stableCopy.js.flow +35 -0
- package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
- package/lib/store/RelayConnection.js +0 -36
- package/lib/store/RelayConnectionResolver.js +0 -177
- package/lib/store/RelayRecordSourceObjectImpl.js +0 -78
- package/lib/util/getFragmentSpecIdentifier.js +0 -26
|
@@ -7,12 +7,11 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var RelayConcreteNode = require('../util/RelayConcreteNode');
|
|
13
14
|
|
|
14
|
-
var RelayConnection = require('./RelayConnection');
|
|
15
|
-
|
|
16
15
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
17
16
|
|
|
18
17
|
var RelayStoreUtils = require('./RelayStoreUtils');
|
|
@@ -24,7 +23,6 @@ var invariant = require("fbjs/lib/invariant");
|
|
|
24
23
|
var CONDITION = RelayConcreteNode.CONDITION,
|
|
25
24
|
CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
|
|
26
25
|
DEFER = RelayConcreteNode.DEFER,
|
|
27
|
-
CONNECTION = RelayConcreteNode.CONNECTION,
|
|
28
26
|
FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
|
|
29
27
|
INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
|
|
30
28
|
LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
|
|
@@ -36,11 +34,11 @@ var CONDITION = RelayConcreteNode.CONDITION,
|
|
|
36
34
|
var getStorageKey = RelayStoreUtils.getStorageKey,
|
|
37
35
|
getModuleOperationKey = RelayStoreUtils.getModuleOperationKey;
|
|
38
36
|
|
|
39
|
-
function mark(recordSource, selector, references,
|
|
37
|
+
function mark(recordSource, selector, references, operationLoader) {
|
|
40
38
|
var dataID = selector.dataID,
|
|
41
39
|
node = selector.node,
|
|
42
40
|
variables = selector.variables;
|
|
43
|
-
var marker = new RelayReferenceMarker(recordSource, variables, references,
|
|
41
|
+
var marker = new RelayReferenceMarker(recordSource, variables, references, operationLoader);
|
|
44
42
|
marker.mark(node, dataID);
|
|
45
43
|
}
|
|
46
44
|
/**
|
|
@@ -48,15 +46,9 @@ function mark(recordSource, selector, references, connectionReferences, getConne
|
|
|
48
46
|
*/
|
|
49
47
|
|
|
50
48
|
|
|
51
|
-
var RelayReferenceMarker =
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
function RelayReferenceMarker(recordSource, variables, references, connectionReferences, getConnectionEvents, operationLoader) {
|
|
55
|
-
var _operationLoader;
|
|
56
|
-
|
|
57
|
-
this._connectionReferences = connectionReferences;
|
|
58
|
-
this._getConnectionEvents = getConnectionEvents;
|
|
59
|
-
this._operationLoader = (_operationLoader = operationLoader) !== null && _operationLoader !== void 0 ? _operationLoader : null;
|
|
49
|
+
var RelayReferenceMarker = /*#__PURE__*/function () {
|
|
50
|
+
function RelayReferenceMarker(recordSource, variables, references, operationLoader) {
|
|
51
|
+
this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
|
|
60
52
|
this._recordSource = recordSource;
|
|
61
53
|
this._references = references;
|
|
62
54
|
this._variables = variables;
|
|
@@ -161,11 +153,6 @@ function () {
|
|
|
161
153
|
|
|
162
154
|
break;
|
|
163
155
|
|
|
164
|
-
case CONNECTION:
|
|
165
|
-
_this._traverseConnection(selection, record);
|
|
166
|
-
|
|
167
|
-
break;
|
|
168
|
-
|
|
169
156
|
default:
|
|
170
157
|
selection;
|
|
171
158
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unknown AST node `%s`.', selection) : invariant(false) : void 0;
|
|
@@ -173,43 +160,6 @@ function () {
|
|
|
173
160
|
});
|
|
174
161
|
};
|
|
175
162
|
|
|
176
|
-
_proto._traverseConnection = function _traverseConnection(connection, record) {
|
|
177
|
-
var _this2 = this;
|
|
178
|
-
|
|
179
|
-
var parentID = RelayModernRecord.getDataID(record);
|
|
180
|
-
var connectionID = RelayConnection.createConnectionID(parentID, connection.label);
|
|
181
|
-
|
|
182
|
-
if (this._connectionReferences.has(connectionID)) {
|
|
183
|
-
return;
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
this._connectionReferences.add(connectionID);
|
|
187
|
-
|
|
188
|
-
var connectionEvents = this._getConnectionEvents(connectionID);
|
|
189
|
-
|
|
190
|
-
if (connectionEvents == null || connectionEvents.length === 0) {
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
connectionEvents.forEach(function (event) {
|
|
195
|
-
if (event.kind === 'fetch') {
|
|
196
|
-
event.edgeIDs.forEach(function (edgeID) {
|
|
197
|
-
if (edgeID != null) {
|
|
198
|
-
_this2._traverse(connection.edges, edgeID);
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
} else if (event.kind === 'insert') {
|
|
202
|
-
_this2._traverse(connection.edges, event.edgeID);
|
|
203
|
-
} else if (event.kind === 'stream.edge') {
|
|
204
|
-
_this2._traverse(connection.edges, event.edgeID);
|
|
205
|
-
} else if (event.kind === 'stream.pageInfo') {// no-op
|
|
206
|
-
} else {
|
|
207
|
-
event;
|
|
208
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Unexpected connection event kind `%s`.', event.kind) : invariant(false) : void 0;
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
};
|
|
212
|
-
|
|
213
163
|
_proto._traverseModuleImport = function _traverseModuleImport(moduleImport, record) {
|
|
214
164
|
var operationLoader = this._operationLoader;
|
|
215
165
|
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReferenceMarker: Expected an operationLoader to be configured when using `@module`.') : invariant(false) : void 0;
|
|
@@ -242,7 +192,7 @@ function () {
|
|
|
242
192
|
};
|
|
243
193
|
|
|
244
194
|
_proto._traversePluralLink = function _traversePluralLink(field, record) {
|
|
245
|
-
var
|
|
195
|
+
var _this2 = this;
|
|
246
196
|
|
|
247
197
|
var storageKey = getStorageKey(field, this._variables);
|
|
248
198
|
var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
@@ -253,7 +203,7 @@ function () {
|
|
|
253
203
|
|
|
254
204
|
linkedIDs.forEach(function (linkedID) {
|
|
255
205
|
if (linkedID != null) {
|
|
256
|
-
|
|
206
|
+
_this2._traverse(field, linkedID);
|
|
257
207
|
}
|
|
258
208
|
});
|
|
259
209
|
};
|
|
@@ -7,16 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
14
|
|
|
14
15
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
16
|
|
|
16
|
-
var RelayConnection = require('./RelayConnection');
|
|
17
|
-
|
|
18
|
-
var RelayConnectionInterface = require('../handlers/connection/RelayConnectionInterface');
|
|
19
|
-
|
|
20
17
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
21
18
|
|
|
22
19
|
var RelayProfiler = require('../util/RelayProfiler');
|
|
@@ -29,7 +26,6 @@ var _require = require('../util/RelayConcreteNode'),
|
|
|
29
26
|
CONDITION = _require.CONDITION,
|
|
30
27
|
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
31
28
|
DEFER = _require.DEFER,
|
|
32
|
-
CONNECTION = _require.CONNECTION,
|
|
33
29
|
INLINE_FRAGMENT = _require.INLINE_FRAGMENT,
|
|
34
30
|
LINKED_FIELD = _require.LINKED_FIELD,
|
|
35
31
|
LINKED_HANDLE = _require.LINKED_HANDLE,
|
|
@@ -46,13 +42,13 @@ var _require3 = require('./RelayModernSelector'),
|
|
|
46
42
|
createNormalizationSelector = _require3.createNormalizationSelector;
|
|
47
43
|
|
|
48
44
|
var _require4 = require('./RelayStoreUtils'),
|
|
49
|
-
formatStorageKey = _require4.formatStorageKey,
|
|
50
45
|
getArgumentValues = _require4.getArgumentValues,
|
|
51
46
|
getHandleStorageKey = _require4.getHandleStorageKey,
|
|
52
47
|
getModuleComponentKey = _require4.getModuleComponentKey,
|
|
53
48
|
getModuleOperationKey = _require4.getModuleOperationKey,
|
|
54
49
|
getStorageKey = _require4.getStorageKey,
|
|
55
|
-
TYPENAME_KEY = _require4.TYPENAME_KEY
|
|
50
|
+
TYPENAME_KEY = _require4.TYPENAME_KEY,
|
|
51
|
+
ROOT_ID = _require4.ROOT_ID;
|
|
56
52
|
|
|
57
53
|
/**
|
|
58
54
|
* Normalizes the results of a query and standard GraphQL response, writing the
|
|
@@ -72,13 +68,11 @@ function normalize(recordSource, selector, response, options) {
|
|
|
72
68
|
*/
|
|
73
69
|
|
|
74
70
|
|
|
75
|
-
var RelayResponseNormalizer =
|
|
76
|
-
/*#__PURE__*/
|
|
77
|
-
function () {
|
|
71
|
+
var RelayResponseNormalizer = /*#__PURE__*/function () {
|
|
78
72
|
function RelayResponseNormalizer(recordSource, variables, options) {
|
|
79
|
-
this._connectionEvents = [];
|
|
80
73
|
this._getDataId = options.getDataID;
|
|
81
74
|
this._handleFieldPayloads = [];
|
|
75
|
+
this._treatMissingFieldsAsNull = options.treatMissingFieldsAsNull;
|
|
82
76
|
this._incrementalPlaceholders = [];
|
|
83
77
|
this._isClientExtension = false;
|
|
84
78
|
this._moduleImportPayloads = [];
|
|
@@ -98,12 +92,12 @@ function () {
|
|
|
98
92
|
this._traverseSelections(node, record, data);
|
|
99
93
|
|
|
100
94
|
return {
|
|
101
|
-
connectionEvents: this._connectionEvents,
|
|
102
95
|
errors: null,
|
|
103
96
|
fieldPayloads: this._handleFieldPayloads,
|
|
104
97
|
incrementalPlaceholders: this._incrementalPlaceholders,
|
|
105
98
|
moduleImportPayloads: this._moduleImportPayloads,
|
|
106
|
-
source: this._recordSource
|
|
99
|
+
source: this._recordSource,
|
|
100
|
+
isFinal: false
|
|
107
101
|
};
|
|
108
102
|
};
|
|
109
103
|
|
|
@@ -187,11 +181,6 @@ function () {
|
|
|
187
181
|
this._isClientExtension = isClientExtension;
|
|
188
182
|
break;
|
|
189
183
|
|
|
190
|
-
case CONNECTION:
|
|
191
|
-
this._normalizeConnection(node, selection, record, data);
|
|
192
|
-
|
|
193
|
-
break;
|
|
194
|
-
|
|
195
184
|
default:
|
|
196
185
|
selection;
|
|
197
186
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
@@ -251,16 +240,14 @@ function () {
|
|
|
251
240
|
};
|
|
252
241
|
|
|
253
242
|
_proto._normalizeModuleImport = function _normalizeModuleImport(parent, moduleImport, record, data) {
|
|
254
|
-
var _componentReference, _operationReference;
|
|
255
|
-
|
|
256
243
|
!(typeof data === 'object' && data) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayResponseNormalizer: Expected data for @module to be an object.') : invariant(false) : void 0;
|
|
257
244
|
var typeName = RelayModernRecord.getType(record);
|
|
258
245
|
var componentKey = getModuleComponentKey(moduleImport.documentName);
|
|
259
246
|
var componentReference = data[componentKey];
|
|
260
|
-
RelayModernRecord.setValue(record, componentKey,
|
|
247
|
+
RelayModernRecord.setValue(record, componentKey, componentReference !== null && componentReference !== void 0 ? componentReference : null);
|
|
261
248
|
var operationKey = getModuleOperationKey(moduleImport.documentName);
|
|
262
249
|
var operationReference = data[operationKey];
|
|
263
|
-
RelayModernRecord.setValue(record, operationKey,
|
|
250
|
+
RelayModernRecord.setValue(record, operationKey, operationReference !== null && operationReference !== void 0 ? operationReference : null);
|
|
264
251
|
|
|
265
252
|
if (operationReference != null) {
|
|
266
253
|
this._moduleImportPayloads.push({
|
|
@@ -272,122 +259,6 @@ function () {
|
|
|
272
259
|
variables: this._variables
|
|
273
260
|
});
|
|
274
261
|
}
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Connections are represented in the AST as a LinkedField (with connection-
|
|
278
|
-
* specific args like after/first stripped) that wraps any metadata fields
|
|
279
|
-
* such as count, plus a Connection node that represents the page of data
|
|
280
|
-
* being fetched (the edges + pageInfo). The outer LinkedField is normalized
|
|
281
|
-
* like any other, and the Connection field is normalized by synthesizing
|
|
282
|
-
* a record to represent the page that was fetched and normalizing the edges
|
|
283
|
-
* and pageInfo into that page record - as well as recording a "fetch" event.
|
|
284
|
-
*/
|
|
285
|
-
;
|
|
286
|
-
|
|
287
|
-
_proto._normalizeConnection = function _normalizeConnection(parent, selection, record, data) {
|
|
288
|
-
// Normalize the data for the page
|
|
289
|
-
var parentID = RelayModernRecord.getDataID(record);
|
|
290
|
-
var args = selection.args != null ? getArgumentValues(selection.args, this._variables) : {};
|
|
291
|
-
var pageStorageKey = formatStorageKey('__connection_page', args);
|
|
292
|
-
var pageID = generateClientID(parentID, pageStorageKey);
|
|
293
|
-
|
|
294
|
-
var pageRecord = this._recordSource.get(pageID);
|
|
295
|
-
|
|
296
|
-
if (pageRecord == null) {
|
|
297
|
-
pageRecord = RelayModernRecord.create(pageID, '__ConnectionPage');
|
|
298
|
-
|
|
299
|
-
this._recordSource.set(pageID, pageRecord);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
RelayModernRecord.setLinkedRecordID(record, pageStorageKey, pageID);
|
|
303
|
-
|
|
304
|
-
this._normalizeField(parent, selection.edges, pageRecord, data);
|
|
305
|
-
|
|
306
|
-
this._normalizeField(parent, selection.pageInfo, pageRecord, data); // Construct a "fetch" connection event
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
var connectionID = RelayConnection.createConnectionID(parentID, selection.label);
|
|
310
|
-
|
|
311
|
-
var _RelayConnectionInter = RelayConnectionInterface.get(),
|
|
312
|
-
EDGES = _RelayConnectionInter.EDGES,
|
|
313
|
-
END_CURSOR = _RelayConnectionInter.END_CURSOR,
|
|
314
|
-
HAS_NEXT_PAGE = _RelayConnectionInter.HAS_NEXT_PAGE,
|
|
315
|
-
HAS_PREV_PAGE = _RelayConnectionInter.HAS_PREV_PAGE,
|
|
316
|
-
PAGE_INFO = _RelayConnectionInter.PAGE_INFO,
|
|
317
|
-
START_CURSOR = _RelayConnectionInter.START_CURSOR;
|
|
318
|
-
|
|
319
|
-
var edgeIDs = RelayModernRecord.getLinkedRecordIDs(pageRecord, EDGES);
|
|
320
|
-
|
|
321
|
-
if (edgeIDs == null) {
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
var pageInfoID = RelayModernRecord.getLinkedRecordID(pageRecord, PAGE_INFO);
|
|
326
|
-
var pageInfoRecord = pageInfoID != null ? this._recordSource.get(pageInfoID) : null;
|
|
327
|
-
var endCursor;
|
|
328
|
-
var hasNextPage;
|
|
329
|
-
var hasPrevPage;
|
|
330
|
-
var startCursor;
|
|
331
|
-
|
|
332
|
-
if (pageInfoRecord != null) {
|
|
333
|
-
endCursor = RelayModernRecord.getValue(pageInfoRecord, END_CURSOR);
|
|
334
|
-
hasNextPage = RelayModernRecord.getValue(pageInfoRecord, HAS_NEXT_PAGE);
|
|
335
|
-
hasPrevPage = RelayModernRecord.getValue(pageInfoRecord, HAS_PREV_PAGE);
|
|
336
|
-
startCursor = RelayModernRecord.getValue(pageInfoRecord, START_CURSOR);
|
|
337
|
-
} // If streaming is enabled, also emit incremental placeholders for the
|
|
338
|
-
// edges and pageInfo
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
var stream = selection.stream;
|
|
342
|
-
var enableStream = stream != null ? stream["if"].kind === 'Variable' ? this._variables[stream["if"].variableName] : stream["if"].value : false;
|
|
343
|
-
|
|
344
|
-
if (stream != null && enableStream === true) {
|
|
345
|
-
this._incrementalPlaceholders.push({
|
|
346
|
-
kind: 'connection_edge',
|
|
347
|
-
args: args,
|
|
348
|
-
connectionID: connectionID,
|
|
349
|
-
label: stream.streamLabel,
|
|
350
|
-
path: (0, _toConsumableArray2["default"])(this._path),
|
|
351
|
-
parentID: pageID,
|
|
352
|
-
node: selection.edges,
|
|
353
|
-
variables: this._variables
|
|
354
|
-
});
|
|
355
|
-
|
|
356
|
-
this._incrementalPlaceholders.push({
|
|
357
|
-
kind: 'connection_page_info',
|
|
358
|
-
args: args,
|
|
359
|
-
connectionID: connectionID,
|
|
360
|
-
data: data,
|
|
361
|
-
label: stream.deferLabel,
|
|
362
|
-
path: (0, _toConsumableArray2["default"])(this._path),
|
|
363
|
-
selector: createNormalizationSelector({
|
|
364
|
-
alias: null,
|
|
365
|
-
args: null,
|
|
366
|
-
concreteType: RelayModernRecord.getType(pageRecord),
|
|
367
|
-
kind: 'LinkedField',
|
|
368
|
-
name: '',
|
|
369
|
-
plural: false,
|
|
370
|
-
selections: [selection.pageInfo],
|
|
371
|
-
storageKey: null
|
|
372
|
-
}, pageID, this._variables),
|
|
373
|
-
typeName: RelayModernRecord.getType(pageRecord)
|
|
374
|
-
});
|
|
375
|
-
}
|
|
376
|
-
|
|
377
|
-
this._connectionEvents.push({
|
|
378
|
-
kind: 'fetch',
|
|
379
|
-
connectionID: connectionID,
|
|
380
|
-
args: args,
|
|
381
|
-
edgeIDs: edgeIDs,
|
|
382
|
-
pageInfo: {
|
|
383
|
-
endCursor: typeof endCursor === 'string' ? endCursor : null,
|
|
384
|
-
startCursor: typeof startCursor === 'string' ? startCursor : null,
|
|
385
|
-
hasNextPage: typeof hasNextPage === 'boolean' ? hasNextPage : null,
|
|
386
|
-
hasPrevPage: typeof hasPrevPage === 'boolean' ? hasPrevPage : null
|
|
387
|
-
},
|
|
388
|
-
request: this._request,
|
|
389
|
-
stream: enableStream === true
|
|
390
|
-
});
|
|
391
262
|
};
|
|
392
263
|
|
|
393
264
|
_proto._normalizeField = function _normalizeField(parent, selection, record, data) {
|
|
@@ -397,7 +268,7 @@ function () {
|
|
|
397
268
|
var fieldValue = data[responseKey];
|
|
398
269
|
|
|
399
270
|
if (fieldValue == null) {
|
|
400
|
-
if (fieldValue === undefined) {
|
|
271
|
+
if (!this._treatMissingFieldsAsNull && fieldValue === undefined) {
|
|
401
272
|
// Fields that are missing in the response are not set on the record.
|
|
402
273
|
// There are three main cases where this can occur:
|
|
403
274
|
// - Inside a client extension: the server will not generally return
|
|
@@ -540,14 +411,14 @@ function () {
|
|
|
540
411
|
var _field$concreteType3;
|
|
541
412
|
|
|
542
413
|
var typeName = (_field$concreteType3 = field.concreteType) !== null && _field$concreteType3 !== void 0 ? _field$concreteType3 : this._getRecordType(payload);
|
|
543
|
-
|
|
414
|
+
var dataID = RelayModernRecord.getDataID(record);
|
|
415
|
+
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;
|
|
544
416
|
};
|
|
545
417
|
|
|
546
418
|
return RelayResponseNormalizer;
|
|
547
|
-
}();
|
|
548
|
-
|
|
419
|
+
}();
|
|
549
420
|
|
|
550
|
-
|
|
421
|
+
var instrumentedNormalize = RelayProfiler.instrument('RelayResponseNormalizer.normalize', normalize);
|
|
551
422
|
module.exports = {
|
|
552
|
-
normalize:
|
|
423
|
+
normalize: instrumentedNormalize
|
|
553
424
|
};
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
@@ -21,24 +22,44 @@ var invariant = require("fbjs/lib/invariant");
|
|
|
21
22
|
|
|
22
23
|
var stableCopy = require('../util/stableCopy');
|
|
23
24
|
|
|
24
|
-
var VARIABLE = RelayConcreteNode.VARIABLE
|
|
25
|
+
var VARIABLE = RelayConcreteNode.VARIABLE,
|
|
26
|
+
LITERAL = RelayConcreteNode.LITERAL,
|
|
27
|
+
OBJECT_VALUE = RelayConcreteNode.OBJECT_VALUE,
|
|
28
|
+
LIST_VALUE = RelayConcreteNode.LIST_VALUE;
|
|
25
29
|
var MODULE_COMPONENT_KEY_PREFIX = '__module_component_';
|
|
26
30
|
var MODULE_OPERATION_KEY_PREFIX = '__module_operation_';
|
|
31
|
+
|
|
32
|
+
function getArgumentValue(arg, variables) {
|
|
33
|
+
if (arg.kind === VARIABLE) {
|
|
34
|
+
// Variables are provided at runtime and are not guaranteed to be stable.
|
|
35
|
+
return getStableVariableValue(arg.variableName, variables);
|
|
36
|
+
} else if (arg.kind === LITERAL) {
|
|
37
|
+
// The Relay compiler generates stable ConcreteArgument values.
|
|
38
|
+
return arg.value;
|
|
39
|
+
} else if (arg.kind === OBJECT_VALUE) {
|
|
40
|
+
var value = {};
|
|
41
|
+
arg.fields.forEach(function (field) {
|
|
42
|
+
value[field.name] = getArgumentValue(field, variables);
|
|
43
|
+
});
|
|
44
|
+
return value;
|
|
45
|
+
} else if (arg.kind === LIST_VALUE) {
|
|
46
|
+
var _value = [];
|
|
47
|
+
arg.items.forEach(function (item) {
|
|
48
|
+
item != null ? _value.push(getArgumentValue(item, variables)) : null;
|
|
49
|
+
});
|
|
50
|
+
return _value;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
27
53
|
/**
|
|
28
54
|
* Returns the values of field/fragment arguments as an object keyed by argument
|
|
29
55
|
* names. Guaranteed to return a result with stable ordered nested values.
|
|
30
56
|
*/
|
|
31
57
|
|
|
58
|
+
|
|
32
59
|
function getArgumentValues(args, variables) {
|
|
33
60
|
var values = {};
|
|
34
61
|
args.forEach(function (arg) {
|
|
35
|
-
|
|
36
|
-
// Variables are provided at runtime and are not guaranteed to be stable.
|
|
37
|
-
values[arg.name] = getStableVariableValue(arg.variableName, variables);
|
|
38
|
-
} else {
|
|
39
|
-
// The Relay compiler generates stable ConcreteArgument values.
|
|
40
|
-
values[arg.name] = arg.value;
|
|
41
|
-
}
|
|
62
|
+
values[arg.name] = getArgumentValue(arg, variables);
|
|
42
63
|
});
|
|
43
64
|
return values;
|
|
44
65
|
}
|
|
@@ -138,8 +159,9 @@ function formatStorageKey(name, argValues) {
|
|
|
138
159
|
var value = argValues[argName];
|
|
139
160
|
|
|
140
161
|
if (value != null) {
|
|
141
|
-
|
|
142
|
-
|
|
162
|
+
var _JSON$stringify;
|
|
163
|
+
|
|
164
|
+
values.push(argName + ':' + ((_JSON$stringify = JSON.stringify(value)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : 'undefined'));
|
|
143
165
|
}
|
|
144
166
|
}
|
|
145
167
|
}
|
|
@@ -181,7 +203,9 @@ var RelayStoreUtils = {
|
|
|
181
203
|
ROOT_ID: 'client:root',
|
|
182
204
|
ROOT_TYPE: '__Root',
|
|
183
205
|
TYPENAME_KEY: '__typename',
|
|
206
|
+
INVALIDATED_AT_KEY: '__invalidated_at',
|
|
184
207
|
formatStorageKey: formatStorageKey,
|
|
208
|
+
getArgumentValue: getArgumentValue,
|
|
185
209
|
getArgumentValues: getArgumentValues,
|
|
186
210
|
getHandleStorageKey: getHandleStorageKey,
|
|
187
211
|
getStorageKey: getStorageKey,
|
|
@@ -8,14 +8,19 @@
|
|
|
8
8
|
* @format
|
|
9
9
|
* @emails oncall+relay
|
|
10
10
|
*/
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
11
12
|
'use strict';
|
|
12
13
|
|
|
13
14
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
15
|
|
|
15
|
-
var
|
|
16
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
17
|
|
|
17
18
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
18
19
|
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
23
|
+
|
|
19
24
|
var inspect = function inspect() {};
|
|
20
25
|
|
|
21
26
|
if (process.env.NODE_ENV !== "production") {
|
|
@@ -133,7 +138,7 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
133
138
|
return record;
|
|
134
139
|
}
|
|
135
140
|
|
|
136
|
-
return new Proxy((
|
|
141
|
+
return new Proxy(_objectSpread({}, record), {
|
|
137
142
|
get: function get(target, prop) {
|
|
138
143
|
var value = target[prop];
|
|
139
144
|
|
|
@@ -147,6 +152,9 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
147
152
|
}
|
|
148
153
|
|
|
149
154
|
if (Array.isArray(value.__refs)) {
|
|
155
|
+
/* $FlowFixMe(>=0.111.0) This comment suppresses an error found
|
|
156
|
+
* when Flow v0.111.0 was deployed. To see the error, delete this
|
|
157
|
+
* comment and run Flow. */
|
|
150
158
|
return value.__refs.map(function (ref) {
|
|
151
159
|
return getWrappedRecord(source, ref);
|
|
152
160
|
});
|
|
@@ -159,10 +167,8 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
159
167
|
};
|
|
160
168
|
|
|
161
169
|
inspect = function inspect(environment, dataID) {
|
|
162
|
-
var _dataID;
|
|
163
|
-
|
|
164
170
|
installDevtoolFormatters();
|
|
165
|
-
return getWrappedRecord(environment.getStore().getSource(),
|
|
171
|
+
return getWrappedRecord(environment.getStore().getSource(), dataID !== null && dataID !== void 0 ? dataID : 'client:root');
|
|
166
172
|
};
|
|
167
173
|
}
|
|
168
174
|
|
|
@@ -7,11 +7,16 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
14
|
|
|
14
|
-
var
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
15
20
|
|
|
16
21
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
17
22
|
|
|
@@ -20,14 +25,13 @@ var RelayRecordSource = require('./RelayRecordSource');
|
|
|
20
25
|
var RelayResponseNormalizer = require('./RelayResponseNormalizer');
|
|
21
26
|
|
|
22
27
|
var _require = require('./RelayStoreUtils'),
|
|
23
|
-
ROOT_ID = _require.ROOT_ID,
|
|
24
28
|
ROOT_TYPE = _require.ROOT_TYPE;
|
|
25
29
|
|
|
26
30
|
function normalizeRelayPayload(selector, payload, errors, options) {
|
|
27
31
|
var source = RelayRecordSource.create();
|
|
28
|
-
source.set(
|
|
32
|
+
source.set(selector.dataID, RelayModernRecord.create(selector.dataID, ROOT_TYPE));
|
|
29
33
|
var relayPayload = RelayResponseNormalizer.normalize(source, selector, payload, options);
|
|
30
|
-
return (
|
|
34
|
+
return _objectSpread({}, relayPayload, {
|
|
31
35
|
errors: errors
|
|
32
36
|
});
|
|
33
37
|
}
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var invariant = require("fbjs/lib/invariant");
|
|
13
14
|
|
|
14
|
-
var _require = require('../query/
|
|
15
|
+
var _require = require('../query/GraphQLTag'),
|
|
15
16
|
getInlineDataFragment = _require.getInlineDataFragment;
|
|
16
17
|
|
|
17
18
|
var _require2 = require('./RelayStoreUtils'),
|
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
|
+
// flowlint ambiguous-object-type:error
|
|
10
11
|
'use strict';
|
|
11
12
|
|
|
12
13
|
var RelayDeclarativeMutationConfig = require('../mutations/RelayDeclarativeMutationConfig');
|
|
13
14
|
|
|
14
15
|
var warning = require("fbjs/lib/warning");
|
|
15
16
|
|
|
16
|
-
var _require = require('../query/
|
|
17
|
+
var _require = require('../query/GraphQLTag'),
|
|
17
18
|
getRequest = _require.getRequest;
|
|
18
19
|
|
|
19
20
|
var _require2 = require('../store/RelayModernOperationDescriptor'),
|
|
@@ -30,7 +31,8 @@ function requestSubscription(environment, config) {
|
|
|
30
31
|
onCompleted = config.onCompleted,
|
|
31
32
|
onError = config.onError,
|
|
32
33
|
onNext = config.onNext,
|
|
33
|
-
variables = config.variables
|
|
34
|
+
variables = config.variables,
|
|
35
|
+
cacheConfig = config.cacheConfig;
|
|
34
36
|
var operation = createOperationDescriptor(subscription, variables);
|
|
35
37
|
process.env.NODE_ENV !== "production" ? warning(!(config.updater && configs), 'requestSubscription: Expected only one of `updater` and `configs` to be provided') : void 0;
|
|
36
38
|
|
|
@@ -41,7 +43,8 @@ function requestSubscription(environment, config) {
|
|
|
41
43
|
|
|
42
44
|
var sub = environment.execute({
|
|
43
45
|
operation: operation,
|
|
44
|
-
updater: updater
|
|
46
|
+
updater: updater,
|
|
47
|
+
cacheConfig: cacheConfig
|
|
45
48
|
}).map(function () {
|
|
46
49
|
var data = environment.lookup(operation.fragment).data; // $FlowFixMe
|
|
47
50
|
|