relay-runtime 11.0.2 → 13.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/handlers/RelayDefaultHandlerProvider.js.flow +3 -3
- package/handlers/connection/ConnectionHandler.js.flow +9 -18
- package/handlers/connection/ConnectionInterface.js.flow +1 -1
- package/handlers/connection/MutationHandlers.js.flow +8 -12
- package/index.js +1 -1
- package/index.js.flow +57 -35
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +13 -19
- package/lib/handlers/connection/ConnectionInterface.js +1 -1
- package/lib/handlers/connection/MutationHandlers.js +4 -7
- package/lib/index.js +59 -44
- package/lib/multi-actor-environment/ActorIdentifier.js +12 -2
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +64 -20
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +324 -61
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +1 -1
- package/lib/multi-actor-environment/index.js +6 -2
- package/lib/mutations/RelayDeclarativeMutationConfig.js +5 -2
- package/lib/mutations/RelayRecordProxy.js +4 -3
- package/lib/mutations/RelayRecordSourceMutator.js +4 -3
- package/lib/mutations/RelayRecordSourceProxy.js +13 -5
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +19 -6
- package/lib/mutations/applyOptimisticMutation.js +7 -7
- package/lib/mutations/commitLocalUpdate.js +1 -1
- package/lib/mutations/commitMutation.js +15 -11
- package/lib/mutations/readUpdatableQuery_EXPERIMENTAL.js +242 -0
- package/lib/mutations/validateMutation.js +11 -6
- package/lib/network/ConvertToExecuteFunction.js +3 -2
- package/lib/network/RelayNetwork.js +4 -3
- package/lib/network/RelayNetworkTypes.js +1 -1
- package/lib/network/RelayObservable.js +1 -1
- package/lib/network/RelayQueryResponseCache.js +22 -6
- package/lib/network/wrapNetworkWithLogObserver.js +79 -0
- package/lib/query/GraphQLTag.js +3 -2
- package/lib/query/PreloadableQueryRegistry.js +1 -1
- package/lib/query/fetchQuery.js +7 -6
- package/lib/query/fetchQueryInternal.js +1 -1
- package/lib/query/fetchQuery_DEPRECATED.js +3 -2
- package/lib/store/ClientID.js +8 -2
- package/lib/store/DataChecker.js +124 -55
- package/lib/store/OperationExecutor.js +489 -215
- package/lib/store/RelayConcreteVariables.js +27 -9
- package/lib/store/RelayExperimentalGraphResponseHandler.js +153 -0
- package/lib/store/RelayExperimentalGraphResponseTransform.js +391 -0
- package/lib/store/RelayModernEnvironment.js +100 -120
- package/lib/store/RelayModernFragmentSpecResolver.js +53 -27
- package/lib/store/RelayModernOperationDescriptor.js +3 -2
- package/lib/store/RelayModernRecord.js +48 -13
- package/lib/store/RelayModernSelector.js +15 -9
- package/lib/store/RelayModernStore.js +56 -23
- package/lib/store/RelayOperationTracker.js +34 -24
- package/lib/store/RelayOptimisticRecordSource.js +1 -1
- package/lib/store/RelayPublishQueue.js +35 -11
- package/lib/store/RelayReader.js +257 -72
- package/lib/store/RelayRecordSource.js +88 -4
- package/lib/store/RelayRecordState.js +1 -1
- package/lib/store/RelayReferenceMarker.js +34 -22
- package/lib/store/RelayResponseNormalizer.js +172 -96
- package/lib/store/RelayStoreReactFlightUtils.js +5 -11
- package/lib/store/RelayStoreSubscriptions.js +15 -10
- package/lib/store/RelayStoreTypes.js +1 -1
- package/lib/store/RelayStoreUtils.js +13 -8
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +10 -6
- package/lib/store/StoreInspector.js +1 -1
- package/lib/store/TypeID.js +1 -1
- package/lib/store/ViewerPattern.js +1 -1
- package/lib/store/cloneRelayHandleSourceField.js +6 -5
- package/lib/store/cloneRelayScalarHandleSourceField.js +6 -5
- package/lib/store/createFragmentSpecResolver.js +1 -1
- package/lib/store/createRelayContext.js +5 -3
- package/lib/store/defaultGetDataID.js +1 -1
- package/lib/store/defaultRequiredFieldLogger.js +1 -1
- package/lib/store/hasOverlappingIDs.js +1 -1
- package/lib/store/isRelayModernEnvironment.js +1 -1
- package/lib/store/normalizeRelayPayload.js +1 -1
- package/lib/store/readInlineData.js +7 -3
- package/lib/subscription/requestSubscription.js +32 -34
- package/lib/util/JSResourceTypes.flow.js +1 -1
- package/lib/util/NormalizationNode.js +1 -1
- package/lib/util/ReaderNode.js +1 -1
- package/lib/util/RelayConcreteNode.js +3 -1
- package/lib/util/RelayDefaultHandleKey.js +1 -1
- package/lib/util/RelayError.js +1 -1
- package/lib/util/RelayFeatureFlags.js +10 -7
- package/lib/util/RelayProfiler.js +1 -1
- package/lib/util/RelayReplaySubject.js +22 -7
- package/lib/util/RelayRuntimeTypes.js +1 -7
- package/lib/util/StringInterner.js +71 -0
- package/lib/util/createPayloadFor3DField.js +1 -1
- package/lib/util/deepFreeze.js +1 -1
- package/lib/util/generateID.js +1 -1
- package/lib/util/getAllRootVariables.js +29 -0
- package/lib/util/getFragmentIdentifier.js +16 -8
- package/lib/util/getOperation.js +3 -2
- 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 +3 -3
- package/lib/util/getRequestIdentifier.js +3 -3
- package/lib/util/getValueAtPath.js +51 -0
- package/lib/util/isEmptyObject.js +2 -2
- package/lib/util/isPromise.js +1 -1
- package/lib/util/isScalarAndEqual.js +1 -1
- package/lib/util/recycleNodesInto.js +1 -1
- package/lib/util/registerEnvironmentWithDevTools.js +26 -0
- package/lib/util/reportMissingRequiredFields.js +1 -1
- package/lib/util/resolveImmediate.js +1 -1
- package/lib/util/stableCopy.js +1 -1
- package/lib/util/withDuration.js +31 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +18 -2
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +94 -58
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +366 -93
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +88 -23
- package/multi-actor-environment/index.js.flow +3 -1
- package/mutations/RelayDeclarativeMutationConfig.js.flow +33 -27
- package/mutations/RelayRecordProxy.js.flow +5 -6
- package/mutations/RelayRecordSourceMutator.js.flow +5 -7
- package/mutations/RelayRecordSourceProxy.js.flow +20 -11
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +23 -8
- package/mutations/applyOptimisticMutation.js.flow +14 -15
- package/mutations/commitLocalUpdate.js.flow +2 -2
- package/mutations/commitMutation.js.flow +36 -47
- package/mutations/readUpdatableQuery_EXPERIMENTAL.js.flow +318 -0
- package/mutations/validateMutation.js.flow +27 -17
- package/network/ConvertToExecuteFunction.js.flow +3 -3
- package/network/RelayNetwork.js.flow +5 -6
- package/network/RelayNetworkTypes.js.flow +1 -1
- package/network/RelayObservable.js.flow +2 -2
- package/network/RelayQueryResponseCache.js.flow +35 -22
- package/network/wrapNetworkWithLogObserver.js.flow +99 -0
- package/package.json +2 -2
- package/query/GraphQLTag.js.flow +11 -11
- package/query/PreloadableQueryRegistry.js.flow +5 -3
- package/query/fetchQuery.js.flow +19 -19
- package/query/fetchQueryInternal.js.flow +7 -10
- package/query/fetchQuery_DEPRECATED.js.flow +7 -7
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/store/ClientID.js.flow +15 -4
- package/store/DataChecker.js.flow +142 -60
- package/store/OperationExecutor.js.flow +575 -320
- package/store/RelayConcreteVariables.js.flow +28 -9
- package/store/RelayExperimentalGraphResponseHandler.js.flow +121 -0
- package/store/RelayExperimentalGraphResponseTransform.js.flow +470 -0
- package/store/RelayModernEnvironment.js.flow +91 -115
- package/store/RelayModernFragmentSpecResolver.js.flow +56 -32
- package/store/RelayModernOperationDescriptor.js.flow +13 -8
- package/store/RelayModernRecord.js.flow +68 -12
- package/store/RelayModernSelector.js.flow +25 -15
- package/store/RelayModernStore.js.flow +67 -32
- package/store/RelayOperationTracker.js.flow +60 -44
- package/store/RelayOptimisticRecordSource.js.flow +3 -3
- package/store/RelayPublishQueue.js.flow +74 -32
- package/store/RelayReader.js.flow +319 -100
- package/store/RelayRecordSource.js.flow +73 -7
- package/store/RelayRecordState.js.flow +1 -1
- package/store/RelayReferenceMarker.js.flow +41 -27
- package/store/RelayResponseNormalizer.js.flow +204 -86
- package/store/RelayStoreReactFlightUtils.js.flow +5 -12
- package/store/RelayStoreSubscriptions.js.flow +20 -12
- package/store/RelayStoreTypes.js.flow +200 -41
- package/store/RelayStoreUtils.js.flow +25 -12
- package/store/ResolverCache.js.flow +249 -0
- package/store/ResolverFragments.js.flow +16 -20
- package/store/StoreInspector.js.flow +3 -3
- package/store/TypeID.js.flow +2 -2
- package/store/ViewerPattern.js.flow +3 -3
- package/store/cloneRelayHandleSourceField.js.flow +6 -7
- package/store/cloneRelayScalarHandleSourceField.js.flow +6 -7
- package/store/createFragmentSpecResolver.js.flow +4 -5
- package/store/createRelayContext.js.flow +4 -4
- package/store/defaultGetDataID.js.flow +1 -1
- package/store/defaultRequiredFieldLogger.js.flow +1 -1
- package/store/hasOverlappingIDs.js.flow +1 -1
- package/store/isRelayModernEnvironment.js.flow +1 -1
- package/store/normalizeRelayPayload.js.flow +7 -8
- package/store/readInlineData.js.flow +8 -9
- package/subscription/requestSubscription.js.flow +55 -51
- package/util/JSResourceTypes.flow.js.flow +1 -1
- package/util/NormalizationNode.js.flow +11 -4
- package/util/ReaderNode.js.flow +25 -2
- package/util/RelayConcreteNode.js.flow +5 -1
- package/util/RelayDefaultHandleKey.js.flow +1 -1
- package/util/RelayError.js.flow +1 -1
- package/util/RelayFeatureFlags.js.flow +23 -15
- package/util/RelayProfiler.js.flow +1 -1
- package/util/RelayReplaySubject.js.flow +10 -10
- package/util/RelayRuntimeTypes.js.flow +70 -3
- package/util/StringInterner.js.flow +69 -0
- package/util/createPayloadFor3DField.js.flow +4 -4
- package/util/deepFreeze.js.flow +1 -1
- package/util/generateID.js.flow +1 -1
- package/util/getAllRootVariables.js.flow +36 -0
- package/util/getFragmentIdentifier.js.flow +28 -16
- package/util/getOperation.js.flow +3 -3
- package/util/getPaginationMetadata.js.flow +69 -0
- package/util/getPaginationVariables.js.flow +108 -0
- package/util/getPendingOperationsForFragment.js.flow +62 -0
- package/util/getRefetchMetadata.js.flow +76 -0
- package/util/getRelayHandleKey.js.flow +2 -3
- package/util/getRequestIdentifier.js.flow +4 -4
- package/util/getValueAtPath.js.flow +46 -0
- package/util/isEmptyObject.js.flow +2 -1
- package/util/isPromise.js.flow +1 -1
- package/util/isScalarAndEqual.js.flow +1 -1
- package/util/recycleNodesInto.js.flow +1 -1
- package/util/registerEnvironmentWithDevTools.js.flow +33 -0
- package/util/reportMissingRequiredFields.js.flow +1 -1
- package/util/resolveImmediate.js.flow +2 -2
- package/util/stableCopy.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
package/lib/store/RelayReader.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -14,13 +14,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
14
14
|
|
|
15
15
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
16
|
|
|
17
|
-
var
|
|
18
|
-
|
|
19
|
-
var RelayModernRecord = require('./RelayModernRecord');
|
|
20
|
-
|
|
21
|
-
var invariant = require('invariant');
|
|
17
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
22
18
|
|
|
23
19
|
var _require = require('../util/RelayConcreteNode'),
|
|
20
|
+
ACTOR_CHANGE = _require.ACTOR_CHANGE,
|
|
21
|
+
CLIENT_EDGE = _require.CLIENT_EDGE,
|
|
24
22
|
CLIENT_EXTENSION = _require.CLIENT_EXTENSION,
|
|
25
23
|
CONDITION = _require.CONDITION,
|
|
26
24
|
DEFER = _require.DEFER,
|
|
@@ -30,34 +28,46 @@ var _require = require('../util/RelayConcreteNode'),
|
|
|
30
28
|
INLINE_FRAGMENT = _require.INLINE_FRAGMENT,
|
|
31
29
|
LINKED_FIELD = _require.LINKED_FIELD,
|
|
32
30
|
MODULE_IMPORT = _require.MODULE_IMPORT,
|
|
33
|
-
REQUIRED_FIELD = _require.REQUIRED_FIELD,
|
|
34
31
|
RELAY_RESOLVER = _require.RELAY_RESOLVER,
|
|
32
|
+
REQUIRED_FIELD = _require.REQUIRED_FIELD,
|
|
35
33
|
SCALAR_FIELD = _require.SCALAR_FIELD,
|
|
36
34
|
STREAM = _require.STREAM;
|
|
37
35
|
|
|
36
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
37
|
+
|
|
38
|
+
var ClientID = require('./ClientID');
|
|
39
|
+
|
|
40
|
+
var RelayModernRecord = require('./RelayModernRecord');
|
|
41
|
+
|
|
38
42
|
var _require2 = require('./RelayStoreReactFlightUtils'),
|
|
39
43
|
getReactFlightClientResponse = _require2.getReactFlightClientResponse;
|
|
40
44
|
|
|
41
45
|
var _require3 = require('./RelayStoreUtils'),
|
|
42
|
-
|
|
46
|
+
CLIENT_EDGE_TRAVERSAL_PATH = _require3.CLIENT_EDGE_TRAVERSAL_PATH,
|
|
43
47
|
FRAGMENT_OWNER_KEY = _require3.FRAGMENT_OWNER_KEY,
|
|
44
48
|
FRAGMENT_PROP_NAME_KEY = _require3.FRAGMENT_PROP_NAME_KEY,
|
|
49
|
+
FRAGMENTS_KEY = _require3.FRAGMENTS_KEY,
|
|
45
50
|
ID_KEY = _require3.ID_KEY,
|
|
46
51
|
IS_WITHIN_UNMATCHED_TYPE_REFINEMENT = _require3.IS_WITHIN_UNMATCHED_TYPE_REFINEMENT,
|
|
47
52
|
MODULE_COMPONENT_KEY = _require3.MODULE_COMPONENT_KEY,
|
|
48
53
|
ROOT_ID = _require3.ROOT_ID,
|
|
49
54
|
getArgumentValues = _require3.getArgumentValues,
|
|
50
|
-
|
|
51
|
-
|
|
55
|
+
getModuleComponentKey = _require3.getModuleComponentKey,
|
|
56
|
+
getStorageKey = _require3.getStorageKey;
|
|
57
|
+
|
|
58
|
+
var _require4 = require('./ResolverCache'),
|
|
59
|
+
NoopResolverCache = _require4.NoopResolverCache;
|
|
52
60
|
|
|
53
|
-
var
|
|
54
|
-
withResolverContext =
|
|
61
|
+
var _require5 = require('./ResolverFragments'),
|
|
62
|
+
withResolverContext = _require5.withResolverContext;
|
|
55
63
|
|
|
56
|
-
var
|
|
57
|
-
generateTypeID =
|
|
64
|
+
var _require6 = require('./TypeID'),
|
|
65
|
+
generateTypeID = _require6.generateTypeID;
|
|
58
66
|
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
var invariant = require('invariant');
|
|
68
|
+
|
|
69
|
+
function read(recordSource, selector, resolverCache) {
|
|
70
|
+
var reader = new RelayReader(recordSource, selector, resolverCache !== null && resolverCache !== void 0 ? resolverCache : new NoopResolverCache());
|
|
61
71
|
return reader.read();
|
|
62
72
|
}
|
|
63
73
|
/**
|
|
@@ -66,7 +76,11 @@ function read(recordSource, selector) {
|
|
|
66
76
|
|
|
67
77
|
|
|
68
78
|
var RelayReader = /*#__PURE__*/function () {
|
|
69
|
-
function RelayReader(recordSource, selector) {
|
|
79
|
+
function RelayReader(recordSource, selector, resolverCache) {
|
|
80
|
+
var _selector$clientEdgeT;
|
|
81
|
+
|
|
82
|
+
this._clientEdgeTraversalPath = RelayFeatureFlags.ENABLE_CLIENT_EDGES && ((_selector$clientEdgeT = selector.clientEdgeTraversalPath) === null || _selector$clientEdgeT === void 0 ? void 0 : _selector$clientEdgeT.length) ? (0, _toConsumableArray2["default"])(selector.clientEdgeTraversalPath) : [];
|
|
83
|
+
this._missingClientEdges = [];
|
|
70
84
|
this._isMissingData = false;
|
|
71
85
|
this._isWithinUnmatchedTypeRefinement = false;
|
|
72
86
|
this._missingRequiredFields = null;
|
|
@@ -75,6 +89,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
75
89
|
this._seenRecords = new Set();
|
|
76
90
|
this._selector = selector;
|
|
77
91
|
this._variables = selector.variables;
|
|
92
|
+
this._resolverCache = resolverCache;
|
|
78
93
|
}
|
|
79
94
|
|
|
80
95
|
var _proto = RelayReader.prototype;
|
|
@@ -103,7 +118,15 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
103
118
|
if (isDataExpectedToBePresent && abstractKey == null && record != null) {
|
|
104
119
|
var recordType = RelayModernRecord.getType(record);
|
|
105
120
|
|
|
106
|
-
if (recordType !== node.type &&
|
|
121
|
+
if (recordType !== node.type && // The root record type is a special `__Root` type and may not match the
|
|
122
|
+
// type on the ast, so ignore type mismatches at the root.
|
|
123
|
+
// We currently detect whether we're at the root by checking against ROOT_ID,
|
|
124
|
+
// but this does not work for mutations/subscriptions which generate unique
|
|
125
|
+
// root ids. This is acceptable in practice as we don't read data for mutations/
|
|
126
|
+
// subscriptions in a situation where we would use isMissingData to decide whether
|
|
127
|
+
// to suspend or not.
|
|
128
|
+
// TODO T96653810: Correctly detect reading from root of mutation/subscription
|
|
129
|
+
dataID !== ROOT_ID) {
|
|
107
130
|
isDataExpectedToBePresent = false;
|
|
108
131
|
}
|
|
109
132
|
} // If this is an abstract fragment (and the precise refinement GK is enabled)
|
|
@@ -112,7 +135,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
112
135
|
// the interface, that itself constitutes "expected" data being missing.
|
|
113
136
|
|
|
114
137
|
|
|
115
|
-
if (isDataExpectedToBePresent && abstractKey != null && record != null
|
|
138
|
+
if (isDataExpectedToBePresent && abstractKey != null && record != null) {
|
|
116
139
|
var _recordType = RelayModernRecord.getType(record);
|
|
117
140
|
|
|
118
141
|
var typeID = generateTypeID(_recordType);
|
|
@@ -137,12 +160,30 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
137
160
|
return {
|
|
138
161
|
data: data,
|
|
139
162
|
isMissingData: this._isMissingData && isDataExpectedToBePresent,
|
|
163
|
+
missingClientEdges: RelayFeatureFlags.ENABLE_CLIENT_EDGES && this._missingClientEdges.length ? this._missingClientEdges : null,
|
|
140
164
|
seenRecords: this._seenRecords,
|
|
141
165
|
selector: this._selector,
|
|
142
166
|
missingRequiredFields: this._missingRequiredFields
|
|
143
167
|
};
|
|
144
168
|
};
|
|
145
169
|
|
|
170
|
+
_proto._markDataAsMissing = function _markDataAsMissing() {
|
|
171
|
+
this._isMissingData = true;
|
|
172
|
+
|
|
173
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES && this._clientEdgeTraversalPath.length) {
|
|
174
|
+
var top = this._clientEdgeTraversalPath[this._clientEdgeTraversalPath.length - 1]; // Top can be null if we've traversed past a client edge into an ordinary
|
|
175
|
+
// client extension field; we never want to fetch in response to missing
|
|
176
|
+
// data off of a client extension field.
|
|
177
|
+
|
|
178
|
+
if (top !== null) {
|
|
179
|
+
this._missingClientEdges.push({
|
|
180
|
+
request: top.readerClientEdge.operation,
|
|
181
|
+
clientEdgeDestinationID: top.clientEdgeDestinationID
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
146
187
|
_proto._traverse = function _traverse(node, dataID, prevData) {
|
|
147
188
|
var record = this._recordSource.get(dataID);
|
|
148
189
|
|
|
@@ -150,7 +191,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
150
191
|
|
|
151
192
|
if (record == null) {
|
|
152
193
|
if (record === undefined) {
|
|
153
|
-
this.
|
|
194
|
+
this._markDataAsMissing();
|
|
154
195
|
}
|
|
155
196
|
|
|
156
197
|
return record;
|
|
@@ -164,8 +205,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
164
205
|
};
|
|
165
206
|
|
|
166
207
|
_proto._getVariableValue = function _getVariableValue(name) {
|
|
167
|
-
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
168
|
-
|
|
208
|
+
!this._variables.hasOwnProperty(name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Undefined variable `%s`.', name) : invariant(false) : void 0;
|
|
169
209
|
return this._variables[name];
|
|
170
210
|
};
|
|
171
211
|
|
|
@@ -220,8 +260,6 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
220
260
|
|
|
221
261
|
switch (selection.kind) {
|
|
222
262
|
case REQUIRED_FIELD:
|
|
223
|
-
!RelayFeatureFlags.ENABLE_REQUIRED_DIRECTIVES ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Encountered a `@required` directive at path "%s" in `%s` without the `ENABLE_REQUIRED_DIRECTIVES` feature flag enabled.', selection.path, this._selector.node.name) : invariant(false) : void 0;
|
|
224
|
-
|
|
225
263
|
var fieldValue = this._readRequiredField(selection, record, data);
|
|
226
264
|
|
|
227
265
|
if (fieldValue == null) {
|
|
@@ -254,7 +292,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
254
292
|
break;
|
|
255
293
|
|
|
256
294
|
case CONDITION:
|
|
257
|
-
var conditionValue = this._getVariableValue(selection.condition);
|
|
295
|
+
var conditionValue = Boolean(this._getVariableValue(selection.condition));
|
|
258
296
|
|
|
259
297
|
if (conditionValue === selection.passingValue) {
|
|
260
298
|
var hasExpectedData = this._traverseSelections(selection.selections, record, data);
|
|
@@ -281,7 +319,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
281
319
|
return false;
|
|
282
320
|
}
|
|
283
321
|
}
|
|
284
|
-
} else
|
|
322
|
+
} else {
|
|
285
323
|
// Similar to the logic in read(): data is only expected to be present
|
|
286
324
|
// if the record is known to conform to the interface. If we don't know
|
|
287
325
|
// whether the type conforms or not, that constitutes missing data.
|
|
@@ -307,12 +345,8 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
307
345
|
this._isMissingData = parentIsMissingData;
|
|
308
346
|
} else if (implementsInterface == null) {
|
|
309
347
|
// Don't know if the type implements the interface or not
|
|
310
|
-
this.
|
|
348
|
+
this._markDataAsMissing();
|
|
311
349
|
}
|
|
312
|
-
} else {
|
|
313
|
-
// legacy behavior for abstract refinements: always read even
|
|
314
|
-
// if the type doesn't conform and don't reset isMissingData
|
|
315
|
-
this._traverseSelections(selection.selections, record, data);
|
|
316
350
|
}
|
|
317
351
|
|
|
318
352
|
break;
|
|
@@ -348,10 +382,22 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
348
382
|
case CLIENT_EXTENSION:
|
|
349
383
|
{
|
|
350
384
|
var isMissingData = this._isMissingData;
|
|
385
|
+
var alreadyMissingClientEdges = this._missingClientEdges.length;
|
|
386
|
+
|
|
387
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
388
|
+
this._clientEdgeTraversalPath.push(null);
|
|
389
|
+
}
|
|
351
390
|
|
|
352
|
-
var _hasExpectedData2 = this._traverseSelections(selection.selections, record, data);
|
|
391
|
+
var _hasExpectedData2 = this._traverseSelections(selection.selections, record, data); // The only case where we want to suspend due to missing data off of
|
|
392
|
+
// a client extension is if we reached a client edge that we might be
|
|
393
|
+
// able to fetch:
|
|
353
394
|
|
|
354
|
-
|
|
395
|
+
|
|
396
|
+
this._isMissingData = isMissingData || this._missingClientEdges.length > alreadyMissingClientEdges;
|
|
397
|
+
|
|
398
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
399
|
+
this._clientEdgeTraversalPath.pop();
|
|
400
|
+
}
|
|
355
401
|
|
|
356
402
|
if (!_hasExpectedData2) {
|
|
357
403
|
return false;
|
|
@@ -380,6 +426,20 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
380
426
|
|
|
381
427
|
break;
|
|
382
428
|
|
|
429
|
+
case ACTOR_CHANGE:
|
|
430
|
+
this._readActorChange(selection, record, data);
|
|
431
|
+
|
|
432
|
+
break;
|
|
433
|
+
|
|
434
|
+
case CLIENT_EDGE:
|
|
435
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
436
|
+
this._readClientEdge(selection, record, data);
|
|
437
|
+
} else {
|
|
438
|
+
throw new Error('Client edges are not yet supported.');
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
break;
|
|
442
|
+
|
|
383
443
|
default:
|
|
384
444
|
selection;
|
|
385
445
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
@@ -401,50 +461,140 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
401
461
|
return this._readLink(selection.field, record, data);
|
|
402
462
|
}
|
|
403
463
|
|
|
464
|
+
case RELAY_RESOLVER:
|
|
465
|
+
if (!RelayFeatureFlags.ENABLE_RELAY_RESOLVERS) {
|
|
466
|
+
throw new Error('Relay Resolver fields are not yet supported.');
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
this._readResolverField(selection.field, record, data);
|
|
470
|
+
|
|
471
|
+
break;
|
|
472
|
+
|
|
404
473
|
default:
|
|
405
474
|
selection.field.kind;
|
|
406
475
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
407
476
|
}
|
|
408
477
|
};
|
|
409
478
|
|
|
410
|
-
_proto._readResolverField = function _readResolverField(
|
|
479
|
+
_proto._readResolverField = function _readResolverField(field, record, data) {
|
|
411
480
|
var _this = this;
|
|
412
481
|
|
|
413
|
-
var
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
fragment =
|
|
417
|
-
var
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
var
|
|
423
|
-
|
|
482
|
+
var _field$alias;
|
|
483
|
+
|
|
484
|
+
var resolverModule = field.resolverModule,
|
|
485
|
+
fragment = field.fragment;
|
|
486
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
487
|
+
var resolverID = ClientID.generateClientID(RelayModernRecord.getDataID(record), storageKey); // Found when reading the resolver fragment, which can happen either when
|
|
488
|
+
// evaluating the resolver and it calls readFragment, or when checking if the
|
|
489
|
+
// inputs have changed since a previous evaluation:
|
|
490
|
+
|
|
491
|
+
var fragmentValue;
|
|
492
|
+
var fragmentReaderSelector;
|
|
493
|
+
var fragmentSeenRecordIDs = new Set();
|
|
494
|
+
|
|
495
|
+
var getDataForResolverFragment = function getDataForResolverFragment(singularReaderSelector) {
|
|
496
|
+
if (fragmentValue != null) {
|
|
497
|
+
// It was already read when checking for input staleness; no need to read it again.
|
|
498
|
+
// Note that the variables like fragmentSeenRecordIDs in the outer closure will have
|
|
499
|
+
// already been set and will still be used in this case.
|
|
500
|
+
return fragmentValue;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
fragmentReaderSelector = singularReaderSelector;
|
|
504
|
+
var existingSeenRecords = _this._seenRecords;
|
|
505
|
+
|
|
506
|
+
try {
|
|
424
507
|
var _resolverFragmentData;
|
|
425
508
|
|
|
509
|
+
_this._seenRecords = fragmentSeenRecordIDs;
|
|
426
510
|
var resolverFragmentData = {};
|
|
427
511
|
|
|
428
512
|
_this._createInlineDataOrResolverFragmentPointer(singularReaderSelector.node, record, resolverFragmentData);
|
|
429
513
|
|
|
430
|
-
|
|
431
|
-
!(typeof
|
|
432
|
-
return
|
|
514
|
+
fragmentValue = (_resolverFragmentData = resolverFragmentData[FRAGMENTS_KEY]) === null || _resolverFragmentData === void 0 ? void 0 : _resolverFragmentData[fragment.name];
|
|
515
|
+
!(typeof fragmentValue === 'object' && fragmentValue !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, "Expected reader data to contain a __fragments property with a property for the fragment named ".concat(fragment.name, ", but it is missing.")) : invariant(false) : void 0;
|
|
516
|
+
return fragmentValue;
|
|
517
|
+
} finally {
|
|
518
|
+
_this._seenRecords = existingSeenRecords;
|
|
433
519
|
}
|
|
434
520
|
};
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
521
|
+
|
|
522
|
+
var resolverContext = {
|
|
523
|
+
getDataForResolverFragment: getDataForResolverFragment
|
|
524
|
+
};
|
|
525
|
+
|
|
526
|
+
var _this$_resolverCache$ = this._resolverCache.readFromCacheOrEvaluate(record, field, this._variables, function () {
|
|
527
|
+
var key = {
|
|
528
|
+
__id: RelayModernRecord.getDataID(record),
|
|
529
|
+
__fragmentOwner: _this._owner,
|
|
530
|
+
__fragments: (0, _defineProperty2["default"])({}, fragment.name, {})
|
|
531
|
+
};
|
|
532
|
+
return withResolverContext(resolverContext, function () {
|
|
533
|
+
// $FlowFixMe[prop-missing] - resolver module's type signature is a lie
|
|
534
|
+
var resolverResult = resolverModule(key);
|
|
535
|
+
return {
|
|
536
|
+
resolverResult: resolverResult,
|
|
537
|
+
fragmentValue: fragmentValue,
|
|
538
|
+
resolverID: resolverID,
|
|
539
|
+
seenRecordIDs: fragmentSeenRecordIDs,
|
|
540
|
+
readerSelector: fragmentReaderSelector
|
|
541
|
+
};
|
|
542
|
+
});
|
|
543
|
+
}, getDataForResolverFragment),
|
|
544
|
+
result = _this$_resolverCache$[0],
|
|
545
|
+
seenRecord = _this$_resolverCache$[1];
|
|
546
|
+
|
|
547
|
+
if (seenRecord != null) {
|
|
548
|
+
this._seenRecords.add(seenRecord);
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
var applicationName = (_field$alias = field.alias) !== null && _field$alias !== void 0 ? _field$alias : field.name;
|
|
552
|
+
data[applicationName] = result;
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
_proto._readClientEdge = function _readClientEdge(field, record, data) {
|
|
556
|
+
var _backingField$alias;
|
|
557
|
+
|
|
558
|
+
var backingField = field.backingField; // Because ReaderClientExtension doesn't have `alias` or `name` and so I don't know
|
|
559
|
+
// how to get its applicationName or storageKey yet:
|
|
560
|
+
|
|
561
|
+
!(backingField.kind !== 'ClientExtension') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Client extension client edges are not yet implemented.') : invariant(false) : void 0;
|
|
562
|
+
var applicationName = (_backingField$alias = backingField.alias) !== null && _backingField$alias !== void 0 ? _backingField$alias : backingField.name;
|
|
563
|
+
var backingFieldData = {};
|
|
564
|
+
|
|
565
|
+
this._traverseSelections([backingField], record, backingFieldData);
|
|
566
|
+
|
|
567
|
+
var destinationDataID = backingFieldData[applicationName];
|
|
568
|
+
|
|
569
|
+
if (destinationDataID == null) {
|
|
570
|
+
data[applicationName] = destinationDataID;
|
|
571
|
+
return;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
!(typeof destinationDataID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Plural client edges not are yet implemented') : invariant(false) : void 0; // FIXME support plural
|
|
575
|
+
// Not wrapping the push/pop in a try/finally because if we throw, the
|
|
576
|
+
// Reader object is not usable after that anyway.
|
|
577
|
+
|
|
578
|
+
this._clientEdgeTraversalPath.push({
|
|
579
|
+
readerClientEdge: field,
|
|
580
|
+
clientEdgeDestinationID: destinationDataID
|
|
439
581
|
});
|
|
440
|
-
|
|
441
|
-
|
|
582
|
+
|
|
583
|
+
var prevData = data[applicationName];
|
|
584
|
+
!(prevData == null || typeof prevData === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayReader(): Expected data for field `%s` on record `%s` ' + 'to be an object, got `%s`.', applicationName, RelayModernRecord.getDataID(record), prevData) : invariant(false) : void 0;
|
|
585
|
+
|
|
586
|
+
var value = this._traverse(field.linkedField, destinationDataID, // $FlowFixMe[incompatible-variance]
|
|
587
|
+
prevData);
|
|
588
|
+
|
|
589
|
+
data[applicationName] = value;
|
|
590
|
+
|
|
591
|
+
this._clientEdgeTraversalPath.pop();
|
|
442
592
|
};
|
|
443
593
|
|
|
444
594
|
_proto._readFlightField = function _readFlightField(field, record, data) {
|
|
445
|
-
var _field$
|
|
595
|
+
var _field$alias2;
|
|
446
596
|
|
|
447
|
-
var applicationName = (_field$
|
|
597
|
+
var applicationName = (_field$alias2 = field.alias) !== null && _field$alias2 !== void 0 ? _field$alias2 : field.name;
|
|
448
598
|
var storageKey = getStorageKey(field, this._variables);
|
|
449
599
|
var reactFlightClientResponseRecordID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
450
600
|
|
|
@@ -452,7 +602,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
452
602
|
data[applicationName] = reactFlightClientResponseRecordID;
|
|
453
603
|
|
|
454
604
|
if (reactFlightClientResponseRecordID === undefined) {
|
|
455
|
-
this.
|
|
605
|
+
this._markDataAsMissing();
|
|
456
606
|
}
|
|
457
607
|
|
|
458
608
|
return reactFlightClientResponseRecordID;
|
|
@@ -466,7 +616,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
466
616
|
data[applicationName] = reactFlightClientResponseRecord;
|
|
467
617
|
|
|
468
618
|
if (reactFlightClientResponseRecord === undefined) {
|
|
469
|
-
this.
|
|
619
|
+
this._markDataAsMissing();
|
|
470
620
|
}
|
|
471
621
|
|
|
472
622
|
return reactFlightClientResponseRecord;
|
|
@@ -478,14 +628,14 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
478
628
|
};
|
|
479
629
|
|
|
480
630
|
_proto._readScalar = function _readScalar(field, record, data) {
|
|
481
|
-
var _field$
|
|
631
|
+
var _field$alias3;
|
|
482
632
|
|
|
483
|
-
var applicationName = (_field$
|
|
633
|
+
var applicationName = (_field$alias3 = field.alias) !== null && _field$alias3 !== void 0 ? _field$alias3 : field.name;
|
|
484
634
|
var storageKey = getStorageKey(field, this._variables);
|
|
485
635
|
var value = RelayModernRecord.getValue(record, storageKey);
|
|
486
636
|
|
|
487
637
|
if (value === undefined) {
|
|
488
|
-
this.
|
|
638
|
+
this._markDataAsMissing();
|
|
489
639
|
}
|
|
490
640
|
|
|
491
641
|
data[applicationName] = value;
|
|
@@ -493,9 +643,9 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
493
643
|
};
|
|
494
644
|
|
|
495
645
|
_proto._readLink = function _readLink(field, record, data) {
|
|
496
|
-
var _field$
|
|
646
|
+
var _field$alias4;
|
|
497
647
|
|
|
498
|
-
var applicationName = (_field$
|
|
648
|
+
var applicationName = (_field$alias4 = field.alias) !== null && _field$alias4 !== void 0 ? _field$alias4 : field.name;
|
|
499
649
|
var storageKey = getStorageKey(field, this._variables);
|
|
500
650
|
var linkedID = RelayModernRecord.getLinkedRecordID(record, storageKey);
|
|
501
651
|
|
|
@@ -503,7 +653,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
503
653
|
data[applicationName] = linkedID;
|
|
504
654
|
|
|
505
655
|
if (linkedID === undefined) {
|
|
506
|
-
this.
|
|
656
|
+
this._markDataAsMissing();
|
|
507
657
|
}
|
|
508
658
|
|
|
509
659
|
return linkedID;
|
|
@@ -518,12 +668,44 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
518
668
|
return value;
|
|
519
669
|
};
|
|
520
670
|
|
|
671
|
+
_proto._readActorChange = function _readActorChange(field, record, data) {
|
|
672
|
+
var _field$alias5;
|
|
673
|
+
|
|
674
|
+
var applicationName = (_field$alias5 = field.alias) !== null && _field$alias5 !== void 0 ? _field$alias5 : field.name;
|
|
675
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
676
|
+
var externalRef = RelayModernRecord.getActorLinkedRecordID(record, storageKey);
|
|
677
|
+
|
|
678
|
+
if (externalRef == null) {
|
|
679
|
+
data[applicationName] = externalRef;
|
|
680
|
+
|
|
681
|
+
if (externalRef === undefined) {
|
|
682
|
+
this._markDataAsMissing();
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
return data[applicationName];
|
|
686
|
+
}
|
|
687
|
+
|
|
688
|
+
var actorIdentifier = externalRef[0],
|
|
689
|
+
dataID = externalRef[1];
|
|
690
|
+
var fragmentRef = {};
|
|
691
|
+
|
|
692
|
+
this._createFragmentPointer(field.fragmentSpread, {
|
|
693
|
+
__id: dataID
|
|
694
|
+
}, fragmentRef);
|
|
695
|
+
|
|
696
|
+
data[applicationName] = {
|
|
697
|
+
__fragmentRef: fragmentRef,
|
|
698
|
+
__viewer: actorIdentifier
|
|
699
|
+
};
|
|
700
|
+
return data[applicationName];
|
|
701
|
+
};
|
|
702
|
+
|
|
521
703
|
_proto._readPluralLink = function _readPluralLink(field, record, data) {
|
|
522
704
|
var _this2 = this;
|
|
523
705
|
|
|
524
|
-
var _field$
|
|
706
|
+
var _field$alias6;
|
|
525
707
|
|
|
526
|
-
var applicationName = (_field$
|
|
708
|
+
var applicationName = (_field$alias6 = field.alias) !== null && _field$alias6 !== void 0 ? _field$alias6 : field.name;
|
|
527
709
|
var storageKey = getStorageKey(field, this._variables);
|
|
528
710
|
var linkedIDs = RelayModernRecord.getLinkedRecordIDs(record, storageKey);
|
|
529
711
|
|
|
@@ -531,7 +713,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
531
713
|
data[applicationName] = linkedIDs;
|
|
532
714
|
|
|
533
715
|
if (linkedIDs === undefined) {
|
|
534
|
-
this.
|
|
716
|
+
this._markDataAsMissing();
|
|
535
717
|
}
|
|
536
718
|
|
|
537
719
|
return linkedIDs;
|
|
@@ -543,7 +725,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
543
725
|
linkedIDs.forEach(function (linkedID, nextIndex) {
|
|
544
726
|
if (linkedID == null) {
|
|
545
727
|
if (linkedID === undefined) {
|
|
546
|
-
_this2.
|
|
728
|
+
_this2._markDataAsMissing();
|
|
547
729
|
} // $FlowFixMe[cannot-write]
|
|
548
730
|
|
|
549
731
|
|
|
@@ -574,7 +756,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
574
756
|
|
|
575
757
|
if (component == null) {
|
|
576
758
|
if (component === undefined) {
|
|
577
|
-
this.
|
|
759
|
+
this._markDataAsMissing();
|
|
578
760
|
}
|
|
579
761
|
|
|
580
762
|
return;
|
|
@@ -588,7 +770,7 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
588
770
|
this._createFragmentPointer({
|
|
589
771
|
kind: 'FragmentSpread',
|
|
590
772
|
name: moduleImport.fragmentName,
|
|
591
|
-
args:
|
|
773
|
+
args: moduleImport.args
|
|
592
774
|
}, record, data);
|
|
593
775
|
|
|
594
776
|
data[FRAGMENT_PROP_NAME_KEY] = moduleImport.fragmentPropName;
|
|
@@ -611,9 +793,12 @@ var RelayReader = /*#__PURE__*/function () {
|
|
|
611
793
|
|
|
612
794
|
fragmentPointers[fragmentSpread.name] = fragmentSpread.args ? getArgumentValues(fragmentSpread.args, this._variables) : {};
|
|
613
795
|
data[FRAGMENT_OWNER_KEY] = this._owner;
|
|
796
|
+
data[IS_WITHIN_UNMATCHED_TYPE_REFINEMENT] = this._isWithinUnmatchedTypeRefinement;
|
|
614
797
|
|
|
615
|
-
if (RelayFeatureFlags.
|
|
616
|
-
|
|
798
|
+
if (RelayFeatureFlags.ENABLE_CLIENT_EDGES) {
|
|
799
|
+
if (this._clientEdgeTraversalPath.length > 0 && this._clientEdgeTraversalPath[this._clientEdgeTraversalPath.length - 1] !== null) {
|
|
800
|
+
data[CLIENT_EDGE_TRAVERSAL_PATH] = (0, _toConsumableArray2["default"])(this._clientEdgeTraversalPath);
|
|
801
|
+
}
|
|
617
802
|
}
|
|
618
803
|
};
|
|
619
804
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
@@ -10,15 +10,99 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
|
+
|
|
15
|
+
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
|
|
16
|
+
|
|
17
|
+
var RelayRecordState = require('./RelayRecordState');
|
|
18
|
+
|
|
19
|
+
var EXISTENT = RelayRecordState.EXISTENT,
|
|
20
|
+
NONEXISTENT = RelayRecordState.NONEXISTENT,
|
|
21
|
+
UNKNOWN = RelayRecordState.UNKNOWN;
|
|
22
|
+
/**
|
|
23
|
+
* An implementation of the `MutableRecordSource` interface (defined in
|
|
24
|
+
* `RelayStoreTypes`) that holds all records in memory (JS Map).
|
|
25
|
+
*/
|
|
14
26
|
|
|
15
27
|
var RelayRecordSource = /*#__PURE__*/function () {
|
|
16
28
|
function RelayRecordSource(records) {
|
|
17
|
-
|
|
29
|
+
var _this = this;
|
|
30
|
+
|
|
31
|
+
this._records = new Map();
|
|
32
|
+
|
|
33
|
+
if (records != null) {
|
|
34
|
+
Object.keys(records).forEach(function (key) {
|
|
35
|
+
_this._records.set(key, records[key]);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
18
38
|
}
|
|
19
39
|
|
|
20
40
|
RelayRecordSource.create = function create(records) {
|
|
21
|
-
return new
|
|
41
|
+
return new RelayRecordSource(records);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
var _proto = RelayRecordSource.prototype;
|
|
45
|
+
|
|
46
|
+
_proto.clear = function clear() {
|
|
47
|
+
this._records = new Map();
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
_proto["delete"] = function _delete(dataID) {
|
|
51
|
+
this._records.set(dataID, null);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
_proto.get = function get(dataID) {
|
|
55
|
+
return this._records.get(dataID);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
_proto.getRecordIDs = function getRecordIDs() {
|
|
59
|
+
return Array.from(this._records.keys());
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
_proto.getStatus = function getStatus(dataID) {
|
|
63
|
+
if (!this._records.has(dataID)) {
|
|
64
|
+
return UNKNOWN;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return this._records.get(dataID) == null ? NONEXISTENT : EXISTENT;
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
_proto.has = function has(dataID) {
|
|
71
|
+
return this._records.has(dataID);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
_proto.remove = function remove(dataID) {
|
|
75
|
+
this._records["delete"](dataID);
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
_proto.set = function set(dataID, record) {
|
|
79
|
+
this._records.set(dataID, record);
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
_proto.size = function size() {
|
|
83
|
+
return this._records.size;
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
_proto.toJSON = function toJSON() {
|
|
87
|
+
var obj = {};
|
|
88
|
+
|
|
89
|
+
var _iterator = (0, _createForOfIteratorHelper2["default"])(this._records),
|
|
90
|
+
_step;
|
|
91
|
+
|
|
92
|
+
try {
|
|
93
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
94
|
+
var _step$value = _step.value,
|
|
95
|
+
key = _step$value[0],
|
|
96
|
+
value = _step$value[1];
|
|
97
|
+
obj[key] = value;
|
|
98
|
+
}
|
|
99
|
+
} catch (err) {
|
|
100
|
+
_iterator.e(err);
|
|
101
|
+
} finally {
|
|
102
|
+
_iterator.f();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return obj;
|
|
22
106
|
};
|
|
23
107
|
|
|
24
108
|
return RelayRecordSource;
|