relay-runtime 11.0.0-rc.0 → 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/handlers/connection/ConnectionHandler.js.flow +7 -0
- package/handlers/connection/MutationHandlers.js.flow +28 -0
- package/index.js +1 -1
- package/index.js.flow +20 -3
- package/lib/handlers/RelayDefaultHandlerProvider.js +1 -1
- package/lib/handlers/connection/ConnectionHandler.js +12 -6
- package/lib/handlers/connection/MutationHandlers.js +67 -8
- package/lib/index.js +15 -0
- package/lib/multi-actor-environment/ActorIdentifier.js +33 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +148 -0
- package/lib/multi-actor-environment/ActorUtils.js +27 -0
- package/lib/multi-actor-environment/MultiActorEnvironment.js +406 -0
- package/lib/multi-actor-environment/MultiActorEnvironmentTypes.js +11 -0
- package/lib/multi-actor-environment/index.js +21 -0
- package/lib/mutations/RelayRecordProxy.js +1 -1
- package/lib/mutations/RelayRecordSourceMutator.js +1 -1
- package/lib/mutations/RelayRecordSourceProxy.js +1 -1
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +7 -2
- package/lib/mutations/applyOptimisticMutation.js +1 -1
- package/lib/mutations/commitMutation.js +5 -2
- package/lib/mutations/validateMutation.js +39 -17
- package/lib/network/RelayNetwork.js +1 -1
- package/lib/network/RelayObservable.js +3 -1
- package/lib/network/RelayQueryResponseCache.js +20 -3
- package/lib/network/wrapNetworkWithLogObserver.js +78 -0
- package/lib/query/GraphQLTag.js +1 -1
- package/lib/query/fetchQuery.js +1 -1
- package/lib/query/fetchQueryInternal.js +1 -1
- package/lib/store/DataChecker.js +132 -50
- package/lib/store/{RelayModernQueryExecutor.js → OperationExecutor.js} +524 -187
- package/lib/store/RelayConcreteVariables.js +29 -4
- package/lib/store/RelayModernEnvironment.js +137 -220
- package/lib/store/RelayModernFragmentSpecResolver.js +49 -23
- package/lib/store/RelayModernRecord.js +36 -2
- package/lib/store/RelayModernSelector.js +1 -1
- package/lib/store/RelayModernStore.js +53 -22
- package/lib/store/RelayOperationTracker.js +34 -24
- package/lib/store/RelayPublishQueue.js +30 -8
- package/lib/store/RelayReader.js +177 -29
- package/lib/store/RelayRecordSource.js +87 -3
- package/lib/store/RelayReferenceMarker.js +53 -28
- package/lib/store/RelayResponseNormalizer.js +247 -108
- package/lib/store/RelayStoreReactFlightUtils.js +7 -11
- package/lib/store/RelayStoreSubscriptions.js +8 -5
- package/lib/store/RelayStoreUtils.js +10 -4
- package/lib/store/ResolverCache.js +213 -0
- package/lib/store/ResolverFragments.js +57 -0
- package/lib/store/cloneRelayHandleSourceField.js +1 -1
- package/lib/store/cloneRelayScalarHandleSourceField.js +1 -1
- package/lib/store/createRelayContext.js +2 -2
- package/lib/store/defaultGetDataID.js +3 -1
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +32 -6
- package/lib/util/RelayConcreteNode.js +3 -0
- package/lib/util/RelayFeatureFlags.js +5 -4
- package/lib/util/RelayProfiler.js +17 -187
- package/lib/util/RelayReplaySubject.js +22 -7
- package/lib/util/deepFreeze.js +1 -0
- 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/getRelayHandleKey.js +1 -1
- package/lib/util/getRequestIdentifier.js +1 -1
- package/lib/util/getValueAtPath.js +51 -0
- package/lib/util/isEmptyObject.js +1 -1
- package/lib/util/registerEnvironmentWithDevTools.js +26 -0
- package/lib/util/withDuration.js +31 -0
- package/multi-actor-environment/ActorIdentifier.js.flow +43 -0
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +217 -0
- package/multi-actor-environment/ActorUtils.js.flow +33 -0
- package/multi-actor-environment/MultiActorEnvironment.js.flow +485 -0
- package/multi-actor-environment/MultiActorEnvironmentTypes.js.flow +245 -0
- package/multi-actor-environment/index.js.flow +27 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +7 -2
- package/mutations/commitMutation.js.flow +3 -1
- package/mutations/validateMutation.js.flow +42 -16
- package/network/RelayNetworkTypes.js.flow +17 -8
- package/network/RelayObservable.js.flow +2 -0
- package/network/RelayQueryResponseCache.js.flow +31 -17
- package/network/wrapNetworkWithLogObserver.js.flow +99 -0
- package/package.json +3 -2
- 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 +148 -44
- package/store/{RelayModernQueryExecutor.js.flow → OperationExecutor.js.flow} +578 -237
- package/store/RelayConcreteVariables.js.flow +31 -1
- package/store/RelayModernEnvironment.js.flow +132 -220
- 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 +57 -17
- package/store/RelayOperationTracker.js.flow +56 -34
- package/store/RelayPublishQueue.js.flow +37 -11
- package/store/RelayReader.js.flow +186 -27
- package/store/RelayRecordSource.js.flow +72 -6
- package/store/RelayReferenceMarker.js.flow +51 -21
- package/store/RelayResponseNormalizer.js.flow +251 -67
- package/store/RelayStoreReactFlightUtils.js.flow +6 -9
- package/store/RelayStoreSubscriptions.js.flow +10 -3
- package/store/RelayStoreTypes.js.flow +144 -21
- package/store/RelayStoreUtils.js.flow +19 -4
- package/store/ResolverCache.js.flow +247 -0
- package/store/ResolverFragments.js.flow +128 -0
- package/store/createRelayContext.js.flow +1 -1
- package/store/defaultGetDataID.js.flow +3 -1
- package/subscription/requestSubscription.js.flow +43 -8
- package/util/NormalizationNode.js.flow +16 -3
- package/util/ReaderNode.js.flow +29 -2
- package/util/RelayConcreteNode.js.flow +3 -0
- package/util/RelayFeatureFlags.js.flow +10 -6
- package/util/RelayProfiler.js.flow +22 -194
- package/util/RelayReplaySubject.js.flow +7 -6
- package/util/RelayRuntimeTypes.js.flow +4 -2
- package/util/deepFreeze.js.flow +2 -1
- 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 +2 -1
- 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
|
@@ -146,10 +146,12 @@ function update(store: RecordSourceProxy, payload: HandleFieldPayload): void {
|
|
|
146
146
|
let nextEdges = [];
|
|
147
147
|
const args = payload.args;
|
|
148
148
|
if (prevEdges && serverEdges) {
|
|
149
|
+
// $FlowFixMe[prop-missing]
|
|
149
150
|
if (args.after != null) {
|
|
150
151
|
// Forward pagination from the end of the connection: append edges
|
|
151
152
|
if (
|
|
152
153
|
clientPageInfo &&
|
|
154
|
+
// $FlowFixMe[prop-missing]
|
|
153
155
|
args.after === clientPageInfo.getValue(END_CURSOR)
|
|
154
156
|
) {
|
|
155
157
|
const nodeIDs = new Set();
|
|
@@ -165,10 +167,12 @@ function update(store: RecordSourceProxy, payload: HandleFieldPayload): void {
|
|
|
165
167
|
);
|
|
166
168
|
return;
|
|
167
169
|
}
|
|
170
|
+
// $FlowFixMe[prop-missing]
|
|
168
171
|
} else if (args.before != null) {
|
|
169
172
|
// Backward pagination from the start of the connection: prepend edges
|
|
170
173
|
if (
|
|
171
174
|
clientPageInfo &&
|
|
175
|
+
// $FlowFixMe[prop-missing]
|
|
172
176
|
args.before === clientPageInfo.getValue(START_CURSOR)
|
|
173
177
|
) {
|
|
174
178
|
const nodeIDs = new Set();
|
|
@@ -200,10 +204,12 @@ function update(store: RecordSourceProxy, payload: HandleFieldPayload): void {
|
|
|
200
204
|
}
|
|
201
205
|
// Page info should be updated even if no new edge were returned.
|
|
202
206
|
if (clientPageInfo && serverPageInfo) {
|
|
207
|
+
// $FlowFixMe[prop-missing]
|
|
203
208
|
if (args.after == null && args.before == null) {
|
|
204
209
|
// The connection was refetched from the beginning/end: replace
|
|
205
210
|
// page_info
|
|
206
211
|
clientPageInfo.copyFieldsFrom(serverPageInfo);
|
|
212
|
+
// $FlowFixMe[prop-missing]
|
|
207
213
|
} else if (args.before != null || (args.after == null && args.last)) {
|
|
208
214
|
clientPageInfo.setValue(
|
|
209
215
|
!!serverPageInfo.getValue(HAS_PREV_PAGE),
|
|
@@ -213,6 +219,7 @@ function update(store: RecordSourceProxy, payload: HandleFieldPayload): void {
|
|
|
213
219
|
if (typeof startCursor === 'string') {
|
|
214
220
|
clientPageInfo.setValue(startCursor, START_CURSOR);
|
|
215
221
|
}
|
|
222
|
+
// $FlowFixMe[prop-missing]
|
|
216
223
|
} else if (args.after != null || (args.before == null && args.first)) {
|
|
217
224
|
clientPageInfo.setValue(
|
|
218
225
|
!!serverPageInfo.getValue(HAS_NEXT_PAGE),
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
'use strict';
|
|
14
14
|
|
|
15
15
|
const ConnectionHandler = require('./ConnectionHandler');
|
|
16
|
+
const ConnectionInterface = require('./ConnectionInterface');
|
|
16
17
|
|
|
17
18
|
const invariant = require('invariant');
|
|
18
19
|
const warning = require('warning');
|
|
@@ -50,6 +51,7 @@ const DeleteEdgeHandler = {
|
|
|
50
51
|
if (record == null) {
|
|
51
52
|
return;
|
|
52
53
|
}
|
|
54
|
+
// $FlowFixMe[prop-missing]
|
|
53
55
|
const {connections} = payload.handleArgs;
|
|
54
56
|
invariant(
|
|
55
57
|
connections != null,
|
|
@@ -99,6 +101,7 @@ function edgeUpdater(
|
|
|
99
101
|
if (record == null) {
|
|
100
102
|
return;
|
|
101
103
|
}
|
|
104
|
+
// $FlowFixMe[prop-missing]
|
|
102
105
|
const {connections} = payload.handleArgs;
|
|
103
106
|
invariant(
|
|
104
107
|
connections != null,
|
|
@@ -120,11 +123,17 @@ function edgeUpdater(
|
|
|
120
123
|
);
|
|
121
124
|
return;
|
|
122
125
|
}
|
|
126
|
+
const {NODE, EDGES} = ConnectionInterface.get();
|
|
123
127
|
const serverEdgeList = serverEdges ?? [singleServerEdge];
|
|
124
128
|
for (const serverEdge of serverEdgeList) {
|
|
125
129
|
if (serverEdge == null) {
|
|
126
130
|
continue;
|
|
127
131
|
}
|
|
132
|
+
const serverNode = serverEdge.getLinkedRecord('node');
|
|
133
|
+
if (!serverNode) {
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
const serverNodeId = serverNode.getDataID();
|
|
128
137
|
for (const connectionID of connections) {
|
|
129
138
|
const connection = store.get(connectionID);
|
|
130
139
|
if (connection == null) {
|
|
@@ -134,6 +143,14 @@ function edgeUpdater(
|
|
|
134
143
|
);
|
|
135
144
|
continue;
|
|
136
145
|
}
|
|
146
|
+
const nodeAlreadyExistsInConnection = connection
|
|
147
|
+
.getLinkedRecords(EDGES)
|
|
148
|
+
?.some(
|
|
149
|
+
edge => edge?.getLinkedRecord(NODE)?.getDataID() === serverNodeId,
|
|
150
|
+
);
|
|
151
|
+
if (nodeAlreadyExistsInConnection) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
137
154
|
const clientEdge = ConnectionHandler.buildConnectionEdge(
|
|
138
155
|
store,
|
|
139
156
|
connection,
|
|
@@ -157,6 +174,7 @@ function nodeUpdater(
|
|
|
157
174
|
if (record == null) {
|
|
158
175
|
return;
|
|
159
176
|
}
|
|
177
|
+
// $FlowFixMe[prop-missing]
|
|
160
178
|
const {connections, edgeTypeName} = payload.handleArgs;
|
|
161
179
|
invariant(
|
|
162
180
|
connections != null,
|
|
@@ -180,11 +198,13 @@ function nodeUpdater(
|
|
|
180
198
|
warning(false, 'MutationHandlers: Expected target node to exist.');
|
|
181
199
|
return;
|
|
182
200
|
}
|
|
201
|
+
const {NODE, EDGES} = ConnectionInterface.get();
|
|
183
202
|
const serverNodeList = serverNodes ?? [singleServerNode];
|
|
184
203
|
for (const serverNode of serverNodeList) {
|
|
185
204
|
if (serverNode == null) {
|
|
186
205
|
continue;
|
|
187
206
|
}
|
|
207
|
+
const serverNodeId = serverNode.getDataID();
|
|
188
208
|
for (const connectionID of connections) {
|
|
189
209
|
const connection = store.get(connectionID);
|
|
190
210
|
if (connection == null) {
|
|
@@ -194,6 +214,14 @@ function nodeUpdater(
|
|
|
194
214
|
);
|
|
195
215
|
continue;
|
|
196
216
|
}
|
|
217
|
+
const nodeAlreadyExistsInConnection = connection
|
|
218
|
+
.getLinkedRecords(EDGES)
|
|
219
|
+
?.some(
|
|
220
|
+
edge => edge?.getLinkedRecord(NODE)?.getDataID() === serverNodeId,
|
|
221
|
+
);
|
|
222
|
+
if (nodeAlreadyExistsInConnection) {
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
197
225
|
const clientEdge = ConnectionHandler.createEdge(
|
|
198
226
|
store,
|
|
199
227
|
connection,
|
package/index.js
CHANGED
package/index.js.flow
CHANGED
|
@@ -50,8 +50,13 @@ const fetchQuery = require('./query/fetchQuery');
|
|
|
50
50
|
const fetchQueryInternal = require('./query/fetchQueryInternal');
|
|
51
51
|
const fetchQuery_DEPRECATED = require('./query/fetchQuery_DEPRECATED');
|
|
52
52
|
const getFragmentIdentifier = require('./util/getFragmentIdentifier');
|
|
53
|
+
const getPaginationMetadata = require('./util/getPaginationMetadata');
|
|
54
|
+
const getPaginationVariables = require('./util/getPaginationVariables');
|
|
55
|
+
const getPendingOperationsForFragment = require('./util/getPendingOperationsForFragment');
|
|
56
|
+
const getRefetchMetadata = require('./util/getRefetchMetadata');
|
|
53
57
|
const getRelayHandleKey = require('./util/getRelayHandleKey');
|
|
54
58
|
const getRequestIdentifier = require('./util/getRequestIdentifier');
|
|
59
|
+
const getValueAtPath = require('./util/getValueAtPath');
|
|
55
60
|
const isPromise = require('./util/isPromise');
|
|
56
61
|
const isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
|
|
57
62
|
const isScalarAndEqual = require('./util/isScalarAndEqual');
|
|
@@ -110,10 +115,11 @@ export type {
|
|
|
110
115
|
Subscription,
|
|
111
116
|
} from './network/RelayObservable';
|
|
112
117
|
export type {GraphQLTaggedNode} from './query/GraphQLTag';
|
|
118
|
+
export type {TaskScheduler} from './store/OperationExecutor';
|
|
113
119
|
export type {EnvironmentConfig} from './store/RelayModernEnvironment';
|
|
114
|
-
export type {TaskScheduler} from './store/RelayModernQueryExecutor';
|
|
115
120
|
export type {RecordState} from './store/RelayRecordState';
|
|
116
121
|
export type {
|
|
122
|
+
ExecuteMutationConfig,
|
|
117
123
|
FragmentMap,
|
|
118
124
|
FragmentReference,
|
|
119
125
|
FragmentSpecResolver,
|
|
@@ -136,9 +142,9 @@ export type {
|
|
|
136
142
|
PluralReaderSelector,
|
|
137
143
|
Props,
|
|
138
144
|
PublishQueue,
|
|
145
|
+
ReactFlightClientResponse,
|
|
139
146
|
ReactFlightPayloadDeserializer,
|
|
140
147
|
ReactFlightServerErrorHandler,
|
|
141
|
-
ReactFlightClientResponse,
|
|
142
148
|
ReaderSelector,
|
|
143
149
|
ReadOnlyRecordProxy,
|
|
144
150
|
RecordProxy,
|
|
@@ -146,13 +152,18 @@ export type {
|
|
|
146
152
|
RecordSourceSelectorProxy,
|
|
147
153
|
RelayContext,
|
|
148
154
|
RequestDescriptor,
|
|
155
|
+
RequiredFieldLogger,
|
|
149
156
|
SelectorData,
|
|
150
157
|
SelectorStoreUpdater,
|
|
151
158
|
SingularReaderSelector,
|
|
152
159
|
Snapshot,
|
|
153
160
|
StoreUpdater,
|
|
154
161
|
} from './store/RelayStoreTypes';
|
|
155
|
-
export type {
|
|
162
|
+
export type {
|
|
163
|
+
DEPRECATED_GraphQLSubscriptionConfig,
|
|
164
|
+
GraphQLSubscriptionConfig,
|
|
165
|
+
SubscriptionParameters,
|
|
166
|
+
} from './subscription/requestSubscription';
|
|
156
167
|
export type {JSResourceReference} from './util/JSResourceTypes.flow';
|
|
157
168
|
export type {
|
|
158
169
|
NormalizationArgument,
|
|
@@ -205,6 +216,7 @@ export type {
|
|
|
205
216
|
VariablesOf,
|
|
206
217
|
} from './util/RelayRuntimeTypes';
|
|
207
218
|
export type {Local3DPayload} from './util/createPayloadFor3DField';
|
|
219
|
+
export type {Direction} from './util/getPaginationVariables';
|
|
208
220
|
export type {RequestIdentifier} from './util/getRequestIdentifier';
|
|
209
221
|
|
|
210
222
|
// As early as possible, check for the existence of the JavaScript globals which
|
|
@@ -327,6 +339,11 @@ module.exports = {
|
|
|
327
339
|
recycleNodesInto: recycleNodesInto,
|
|
328
340
|
stableCopy: stableCopy,
|
|
329
341
|
getFragmentIdentifier: getFragmentIdentifier,
|
|
342
|
+
getRefetchMetadata: getRefetchMetadata,
|
|
343
|
+
getPaginationMetadata: getPaginationMetadata,
|
|
344
|
+
getPaginationVariables: getPaginationVariables,
|
|
345
|
+
getPendingOperationsForFragment: getPendingOperationsForFragment,
|
|
346
|
+
getValueAtPath: getValueAtPath,
|
|
330
347
|
__internal: {
|
|
331
348
|
OperationTracker: RelayOperationTracker,
|
|
332
349
|
createRelayContext: createRelayContext,
|
|
@@ -14,7 +14,7 @@ var ConnectionHandler = require('./connection/ConnectionHandler');
|
|
|
14
14
|
|
|
15
15
|
var MutationHandlers = require('./connection/MutationHandlers');
|
|
16
16
|
|
|
17
|
-
var invariant = require(
|
|
17
|
+
var invariant = require('invariant');
|
|
18
18
|
|
|
19
19
|
function RelayDefaultHandlerProvider(handle) {
|
|
20
20
|
switch (handle) {
|
|
@@ -14,7 +14,7 @@ var ConnectionInterface = require('./ConnectionInterface');
|
|
|
14
14
|
|
|
15
15
|
var getRelayHandleKey = require('../../util/getRelayHandleKey');
|
|
16
16
|
|
|
17
|
-
var invariant = require(
|
|
17
|
+
var invariant = require('invariant');
|
|
18
18
|
|
|
19
19
|
var warning = require("fbjs/lib/warning");
|
|
20
20
|
|
|
@@ -133,19 +133,23 @@ function update(store, payload) {
|
|
|
133
133
|
var args = payload.args;
|
|
134
134
|
|
|
135
135
|
if (prevEdges && _serverEdges) {
|
|
136
|
+
// $FlowFixMe[prop-missing]
|
|
136
137
|
if (args.after != null) {
|
|
137
138
|
// Forward pagination from the end of the connection: append edges
|
|
138
|
-
if (clientPageInfo &&
|
|
139
|
+
if (clientPageInfo && // $FlowFixMe[prop-missing]
|
|
140
|
+
args.after === clientPageInfo.getValue(END_CURSOR)) {
|
|
139
141
|
var nodeIDs = new Set();
|
|
140
142
|
mergeEdges(prevEdges, nextEdges, nodeIDs);
|
|
141
143
|
mergeEdges(_serverEdges, nextEdges, nodeIDs);
|
|
142
144
|
} else {
|
|
143
145
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected after cursor `%s`, edges must ' + 'be fetched from the end of the list (`%s`).', args.after, clientPageInfo && clientPageInfo.getValue(END_CURSOR)) : void 0;
|
|
144
146
|
return;
|
|
145
|
-
}
|
|
147
|
+
} // $FlowFixMe[prop-missing]
|
|
148
|
+
|
|
146
149
|
} else if (args.before != null) {
|
|
147
150
|
// Backward pagination from the start of the connection: prepend edges
|
|
148
|
-
if (clientPageInfo &&
|
|
151
|
+
if (clientPageInfo && // $FlowFixMe[prop-missing]
|
|
152
|
+
args.before === clientPageInfo.getValue(START_CURSOR)) {
|
|
149
153
|
var _nodeIDs = new Set();
|
|
150
154
|
|
|
151
155
|
mergeEdges(_serverEdges, nextEdges, _nodeIDs);
|
|
@@ -172,17 +176,19 @@ function update(store, payload) {
|
|
|
172
176
|
|
|
173
177
|
|
|
174
178
|
if (clientPageInfo && serverPageInfo) {
|
|
179
|
+
// $FlowFixMe[prop-missing]
|
|
175
180
|
if (args.after == null && args.before == null) {
|
|
176
181
|
// The connection was refetched from the beginning/end: replace
|
|
177
182
|
// page_info
|
|
178
|
-
clientPageInfo.copyFieldsFrom(serverPageInfo);
|
|
183
|
+
clientPageInfo.copyFieldsFrom(serverPageInfo); // $FlowFixMe[prop-missing]
|
|
179
184
|
} else if (args.before != null || args.after == null && args.last) {
|
|
180
185
|
clientPageInfo.setValue(!!serverPageInfo.getValue(HAS_PREV_PAGE), HAS_PREV_PAGE);
|
|
181
186
|
var startCursor = serverPageInfo.getValue(START_CURSOR);
|
|
182
187
|
|
|
183
188
|
if (typeof startCursor === 'string') {
|
|
184
189
|
clientPageInfo.setValue(startCursor, START_CURSOR);
|
|
185
|
-
}
|
|
190
|
+
} // $FlowFixMe[prop-missing]
|
|
191
|
+
|
|
186
192
|
} else if (args.after != null || args.before == null && args.first) {
|
|
187
193
|
clientPageInfo.setValue(!!serverPageInfo.getValue(HAS_NEXT_PAGE), HAS_NEXT_PAGE);
|
|
188
194
|
var endCursor = serverPageInfo.getValue(END_CURSOR);
|
|
@@ -16,7 +16,9 @@ var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime
|
|
|
16
16
|
|
|
17
17
|
var ConnectionHandler = require('./ConnectionHandler');
|
|
18
18
|
|
|
19
|
-
var
|
|
19
|
+
var ConnectionInterface = require('./ConnectionInterface');
|
|
20
|
+
|
|
21
|
+
var invariant = require('invariant');
|
|
20
22
|
|
|
21
23
|
var warning = require("fbjs/lib/warning");
|
|
22
24
|
|
|
@@ -45,7 +47,8 @@ var DeleteEdgeHandler = {
|
|
|
45
47
|
|
|
46
48
|
if (record == null) {
|
|
47
49
|
return;
|
|
48
|
-
}
|
|
50
|
+
} // $FlowFixMe[prop-missing]
|
|
51
|
+
|
|
49
52
|
|
|
50
53
|
var connections = payload.handleArgs.connections;
|
|
51
54
|
!(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0;
|
|
@@ -98,7 +101,8 @@ function edgeUpdater(insertFn) {
|
|
|
98
101
|
|
|
99
102
|
if (record == null) {
|
|
100
103
|
return;
|
|
101
|
-
}
|
|
104
|
+
} // $FlowFixMe[prop-missing]
|
|
105
|
+
|
|
102
106
|
|
|
103
107
|
var connections = payload.handleArgs.connections;
|
|
104
108
|
!(connections != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Expected connection IDs to be specified.') : invariant(false) : void 0;
|
|
@@ -119,19 +123,31 @@ function edgeUpdater(insertFn) {
|
|
|
119
123
|
return;
|
|
120
124
|
}
|
|
121
125
|
|
|
126
|
+
var _ConnectionInterface$ = ConnectionInterface.get(),
|
|
127
|
+
NODE = _ConnectionInterface$.NODE,
|
|
128
|
+
EDGES = _ConnectionInterface$.EDGES;
|
|
129
|
+
|
|
122
130
|
var serverEdgeList = (_serverEdges = serverEdges) !== null && _serverEdges !== void 0 ? _serverEdges : [singleServerEdge];
|
|
123
131
|
|
|
124
132
|
var _iterator2 = (0, _createForOfIteratorHelper2["default"])(serverEdgeList),
|
|
125
133
|
_step2;
|
|
126
134
|
|
|
127
135
|
try {
|
|
128
|
-
|
|
136
|
+
var _loop = function _loop() {
|
|
129
137
|
var serverEdge = _step2.value;
|
|
130
138
|
|
|
131
139
|
if (serverEdge == null) {
|
|
132
|
-
continue;
|
|
140
|
+
return "continue";
|
|
133
141
|
}
|
|
134
142
|
|
|
143
|
+
var serverNode = serverEdge.getLinkedRecord('node');
|
|
144
|
+
|
|
145
|
+
if (!serverNode) {
|
|
146
|
+
return "continue";
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
var serverNodeId = serverNode.getDataID();
|
|
150
|
+
|
|
135
151
|
var _iterator3 = (0, _createForOfIteratorHelper2["default"])(connections),
|
|
136
152
|
_step3;
|
|
137
153
|
|
|
@@ -145,6 +161,16 @@ function edgeUpdater(insertFn) {
|
|
|
145
161
|
continue;
|
|
146
162
|
}
|
|
147
163
|
|
|
164
|
+
var nodeAlreadyExistsInConnection = (_connection$getLinked = connection.getLinkedRecords(EDGES)) === null || _connection$getLinked === void 0 ? void 0 : _connection$getLinked.some(function (edge) {
|
|
165
|
+
var _edge$getLinkedRecord;
|
|
166
|
+
|
|
167
|
+
return (edge === null || edge === void 0 ? void 0 : (_edge$getLinkedRecord = edge.getLinkedRecord(NODE)) === null || _edge$getLinkedRecord === void 0 ? void 0 : _edge$getLinkedRecord.getDataID()) === serverNodeId;
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
if (nodeAlreadyExistsInConnection) {
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
|
|
148
174
|
var clientEdge = ConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
|
|
149
175
|
!(clientEdge != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Failed to build the edge.') : invariant(false) : void 0;
|
|
150
176
|
insertFn(connection, clientEdge);
|
|
@@ -154,6 +180,14 @@ function edgeUpdater(insertFn) {
|
|
|
154
180
|
} finally {
|
|
155
181
|
_iterator3.f();
|
|
156
182
|
}
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
186
|
+
var _connection$getLinked;
|
|
187
|
+
|
|
188
|
+
var _ret = _loop();
|
|
189
|
+
|
|
190
|
+
if (_ret === "continue") continue;
|
|
157
191
|
}
|
|
158
192
|
} catch (err) {
|
|
159
193
|
_iterator2.e(err);
|
|
@@ -171,7 +205,8 @@ function nodeUpdater(insertFn) {
|
|
|
171
205
|
|
|
172
206
|
if (record == null) {
|
|
173
207
|
return;
|
|
174
|
-
}
|
|
208
|
+
} // $FlowFixMe[prop-missing]
|
|
209
|
+
|
|
175
210
|
|
|
176
211
|
var _payload$handleArgs = payload.handleArgs,
|
|
177
212
|
connections = _payload$handleArgs.connections,
|
|
@@ -196,19 +231,25 @@ function nodeUpdater(insertFn) {
|
|
|
196
231
|
return;
|
|
197
232
|
}
|
|
198
233
|
|
|
234
|
+
var _ConnectionInterface$2 = ConnectionInterface.get(),
|
|
235
|
+
NODE = _ConnectionInterface$2.NODE,
|
|
236
|
+
EDGES = _ConnectionInterface$2.EDGES;
|
|
237
|
+
|
|
199
238
|
var serverNodeList = (_serverNodes = serverNodes) !== null && _serverNodes !== void 0 ? _serverNodes : [singleServerNode];
|
|
200
239
|
|
|
201
240
|
var _iterator4 = (0, _createForOfIteratorHelper2["default"])(serverNodeList),
|
|
202
241
|
_step4;
|
|
203
242
|
|
|
204
243
|
try {
|
|
205
|
-
|
|
244
|
+
var _loop2 = function _loop2() {
|
|
206
245
|
var serverNode = _step4.value;
|
|
207
246
|
|
|
208
247
|
if (serverNode == null) {
|
|
209
|
-
continue;
|
|
248
|
+
return "continue";
|
|
210
249
|
}
|
|
211
250
|
|
|
251
|
+
var serverNodeId = serverNode.getDataID();
|
|
252
|
+
|
|
212
253
|
var _iterator5 = (0, _createForOfIteratorHelper2["default"])(connections),
|
|
213
254
|
_step5;
|
|
214
255
|
|
|
@@ -222,6 +263,16 @@ function nodeUpdater(insertFn) {
|
|
|
222
263
|
continue;
|
|
223
264
|
}
|
|
224
265
|
|
|
266
|
+
var nodeAlreadyExistsInConnection = (_connection$getLinked2 = connection.getLinkedRecords(EDGES)) === null || _connection$getLinked2 === void 0 ? void 0 : _connection$getLinked2.some(function (edge) {
|
|
267
|
+
var _edge$getLinkedRecord2;
|
|
268
|
+
|
|
269
|
+
return (edge === null || edge === void 0 ? void 0 : (_edge$getLinkedRecord2 = edge.getLinkedRecord(NODE)) === null || _edge$getLinkedRecord2 === void 0 ? void 0 : _edge$getLinkedRecord2.getDataID()) === serverNodeId;
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
if (nodeAlreadyExistsInConnection) {
|
|
273
|
+
continue;
|
|
274
|
+
}
|
|
275
|
+
|
|
225
276
|
var clientEdge = ConnectionHandler.createEdge(store, connection, serverNode, edgeTypeName);
|
|
226
277
|
!(clientEdge != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'MutationHandlers: Failed to build the edge.') : invariant(false) : void 0;
|
|
227
278
|
insertFn(connection, clientEdge);
|
|
@@ -231,6 +282,14 @@ function nodeUpdater(insertFn) {
|
|
|
231
282
|
} finally {
|
|
232
283
|
_iterator5.f();
|
|
233
284
|
}
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
288
|
+
var _connection$getLinked2;
|
|
289
|
+
|
|
290
|
+
var _ret2 = _loop2();
|
|
291
|
+
|
|
292
|
+
if (_ret2 === "continue") continue;
|
|
234
293
|
}
|
|
235
294
|
} catch (err) {
|
|
236
295
|
_iterator4.e(err);
|
package/lib/index.js
CHANGED
|
@@ -84,10 +84,20 @@ var fetchQuery_DEPRECATED = require('./query/fetchQuery_DEPRECATED');
|
|
|
84
84
|
|
|
85
85
|
var getFragmentIdentifier = require('./util/getFragmentIdentifier');
|
|
86
86
|
|
|
87
|
+
var getPaginationMetadata = require('./util/getPaginationMetadata');
|
|
88
|
+
|
|
89
|
+
var getPaginationVariables = require('./util/getPaginationVariables');
|
|
90
|
+
|
|
91
|
+
var getPendingOperationsForFragment = require('./util/getPendingOperationsForFragment');
|
|
92
|
+
|
|
93
|
+
var getRefetchMetadata = require('./util/getRefetchMetadata');
|
|
94
|
+
|
|
87
95
|
var getRelayHandleKey = require('./util/getRelayHandleKey');
|
|
88
96
|
|
|
89
97
|
var getRequestIdentifier = require('./util/getRequestIdentifier');
|
|
90
98
|
|
|
99
|
+
var getValueAtPath = require('./util/getValueAtPath');
|
|
100
|
+
|
|
91
101
|
var isPromise = require('./util/isPromise');
|
|
92
102
|
|
|
93
103
|
var isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
|
|
@@ -214,6 +224,11 @@ module.exports = {
|
|
|
214
224
|
recycleNodesInto: recycleNodesInto,
|
|
215
225
|
stableCopy: stableCopy,
|
|
216
226
|
getFragmentIdentifier: getFragmentIdentifier,
|
|
227
|
+
getRefetchMetadata: getRefetchMetadata,
|
|
228
|
+
getPaginationMetadata: getPaginationMetadata,
|
|
229
|
+
getPaginationVariables: getPaginationVariables,
|
|
230
|
+
getPendingOperationsForFragment: getPendingOperationsForFragment,
|
|
231
|
+
getValueAtPath: getValueAtPath,
|
|
217
232
|
__internal: {
|
|
218
233
|
OperationTracker: RelayOperationTracker,
|
|
219
234
|
createRelayContext: createRelayContext,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
/**
|
|
13
|
+
* A unique identifier of the current actor.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
var invariant = require('invariant');
|
|
17
|
+
|
|
18
|
+
var INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE = 'INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE';
|
|
19
|
+
|
|
20
|
+
function assertInternalActorIndentifier(actorIdentifier) {
|
|
21
|
+
!(actorIdentifier === INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Expected to use only internal version of the `actorIdentifier`. "%s" was provided.', actorIdentifier) : invariant(false) : void 0;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = {
|
|
25
|
+
assertInternalActorIndentifier: assertInternalActorIndentifier,
|
|
26
|
+
getActorIdentifier: function getActorIdentifier(actorID) {
|
|
27
|
+
return actorID;
|
|
28
|
+
},
|
|
29
|
+
getDefaultActorIdentifier: function getDefaultActorIdentifier() {
|
|
30
|
+
throw new Error('Not Implemented');
|
|
31
|
+
},
|
|
32
|
+
INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE: INTERNAL_ACTOR_IDENTIFIER_DO_NOT_USE
|
|
33
|
+
};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
3
|
+
*
|
|
4
|
+
* This source code is licensed under the MIT license found in the
|
|
5
|
+
* LICENSE file in the root directory of this source tree.
|
|
6
|
+
*
|
|
7
|
+
* @emails oncall+relay
|
|
8
|
+
*
|
|
9
|
+
* @format
|
|
10
|
+
*/
|
|
11
|
+
'use strict';
|
|
12
|
+
|
|
13
|
+
var RelayOperationTracker = require('../store/RelayOperationTracker');
|
|
14
|
+
|
|
15
|
+
var RelayPublishQueue = require('../store/RelayPublishQueue');
|
|
16
|
+
|
|
17
|
+
var defaultGetDataID = require('../store/defaultGetDataID');
|
|
18
|
+
|
|
19
|
+
var registerEnvironmentWithDevTools = require('../util/registerEnvironmentWithDevTools');
|
|
20
|
+
|
|
21
|
+
var wrapNetworkWithLogObserver = require('../network/wrapNetworkWithLogObserver');
|
|
22
|
+
|
|
23
|
+
var ActorSpecificEnvironment = /*#__PURE__*/function () {
|
|
24
|
+
function ActorSpecificEnvironment(config) {
|
|
25
|
+
var _this = this;
|
|
26
|
+
|
|
27
|
+
this.configName = config.configName;
|
|
28
|
+
this.actorIdentifier = config.actorIdentifier;
|
|
29
|
+
this.multiActorEnvironment = config.multiActorEnvironment;
|
|
30
|
+
this.__log = config.logFn;
|
|
31
|
+
this.requiredFieldLogger = config.requiredFieldLogger;
|
|
32
|
+
this._operationTracker = new RelayOperationTracker();
|
|
33
|
+
this._store = config.store;
|
|
34
|
+
this._network = wrapNetworkWithLogObserver(this, config.network);
|
|
35
|
+
this._publishQueue = new RelayPublishQueue(config.store, config.handlerProvider, defaultGetDataID);
|
|
36
|
+
this._defaultRenderPolicy = config.defaultRenderPolicy; // TODO:T92305692 Remove `options` in favor of directly using `actorIdentifier` on the environment
|
|
37
|
+
|
|
38
|
+
this.options = {
|
|
39
|
+
actorID: this.actorIdentifier
|
|
40
|
+
}; // We need to add this here to pass `isRelayModernEnvironment` check
|
|
41
|
+
// $FlowFixMe[prop-missing]
|
|
42
|
+
|
|
43
|
+
this['@@RelayModernEnvironment'] = true;
|
|
44
|
+
|
|
45
|
+
if (process.env.NODE_ENV !== "production") {
|
|
46
|
+
var _require = require('../store/StoreInspector'),
|
|
47
|
+
inspect = _require.inspect;
|
|
48
|
+
|
|
49
|
+
this.DEBUG_inspect = function (dataID) {
|
|
50
|
+
return inspect(_this, dataID);
|
|
51
|
+
};
|
|
52
|
+
} // Register this Relay Environment with Relay DevTools if it exists.
|
|
53
|
+
// Note: this must always be the last step in the constructor.
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
registerEnvironmentWithDevTools(this);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
var _proto = ActorSpecificEnvironment.prototype;
|
|
60
|
+
|
|
61
|
+
_proto.getPublishQueue = function getPublishQueue() {
|
|
62
|
+
return this._publishQueue;
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
_proto.UNSTABLE_getDefaultRenderPolicy = function UNSTABLE_getDefaultRenderPolicy() {
|
|
66
|
+
return this._defaultRenderPolicy;
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
_proto.applyMutation = function applyMutation(optimisticConfig) {
|
|
70
|
+
return this.multiActorEnvironment.applyMutation(this, optimisticConfig);
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
_proto.applyUpdate = function applyUpdate(optimisticUpdate) {
|
|
74
|
+
return this.multiActorEnvironment.applyUpdate(this, optimisticUpdate);
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
_proto.revertUpdate = function revertUpdate(optimisticUpdate) {
|
|
78
|
+
return this.multiActorEnvironment.revertUpdate(this, optimisticUpdate);
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
_proto.replaceUpdate = function replaceUpdate(optimisticUpdate, replacementUpdate) {
|
|
82
|
+
return this.multiActorEnvironment.replaceUpdate(this, optimisticUpdate, replacementUpdate);
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
_proto.check = function check(operation) {
|
|
86
|
+
return this.multiActorEnvironment.check(this, operation);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
_proto.subscribe = function subscribe(snapshot, callback) {
|
|
90
|
+
return this.multiActorEnvironment.subscribe(this, snapshot, callback);
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
_proto.retain = function retain(operation) {
|
|
94
|
+
return this.multiActorEnvironment.retain(this, operation);
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
_proto.commitUpdate = function commitUpdate(updater) {
|
|
98
|
+
return this.multiActorEnvironment.commitUpdate(this, updater);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Commit a payload to the environment using the given operation selector.
|
|
102
|
+
*/
|
|
103
|
+
;
|
|
104
|
+
|
|
105
|
+
_proto.commitPayload = function commitPayload(operationDescriptor, payload) {
|
|
106
|
+
return this.multiActorEnvironment.commitPayload(this, operationDescriptor, payload);
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
_proto.getNetwork = function getNetwork() {
|
|
110
|
+
return this._network;
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
_proto.getStore = function getStore() {
|
|
114
|
+
return this._store;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
_proto.getOperationTracker = function getOperationTracker() {
|
|
118
|
+
return this._operationTracker;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
_proto.lookup = function lookup(selector) {
|
|
122
|
+
return this.multiActorEnvironment.lookup(this, selector);
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
_proto.execute = function execute(config) {
|
|
126
|
+
return this.multiActorEnvironment.execute(this, config);
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
_proto.executeMutation = function executeMutation(options) {
|
|
130
|
+
return this.multiActorEnvironment.executeMutation(this, options);
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
_proto.executeWithSource = function executeWithSource(options) {
|
|
134
|
+
return this.multiActorEnvironment.executeWithSource(this, options);
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
_proto.isRequestActive = function isRequestActive(requestIdentifier) {
|
|
138
|
+
return this.multiActorEnvironment.isRequestActive(this, requestIdentifier);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
_proto.isServer = function isServer() {
|
|
142
|
+
return this.multiActorEnvironment.isServer();
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
return ActorSpecificEnvironment;
|
|
146
|
+
}();
|
|
147
|
+
|
|
148
|
+
module.exports = ActorSpecificEnvironment;
|