relay-runtime 8.0.0 → 10.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/handlers/RelayDefaultHandlerProvider.js.flow +41 -0
- package/handlers/connection/ConnectionHandler.js.flow +549 -0
- package/handlers/connection/ConnectionInterface.js.flow +92 -0
- package/handlers/connection/MutationHandlers.js.flow +88 -0
- package/index.js +1 -1
- package/index.js.flow +320 -0
- package/lib/handlers/RelayDefaultHandlerProvider.js +13 -2
- package/lib/handlers/connection/{RelayConnectionHandler.js → ConnectionHandler.js} +33 -35
- package/lib/handlers/connection/{RelayConnectionInterface.js → ConnectionInterface.js} +2 -2
- package/lib/handlers/connection/MutationHandlers.js +86 -0
- package/lib/index.js +15 -19
- package/lib/mutations/RelayDeclarativeMutationConfig.js +29 -52
- package/lib/mutations/RelayRecordProxy.js +1 -3
- package/lib/mutations/RelayRecordSourceMutator.js +2 -9
- package/lib/mutations/RelayRecordSourceProxy.js +2 -4
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -13
- package/lib/mutations/commitMutation.js +13 -3
- package/lib/mutations/validateMutation.js +16 -9
- package/lib/network/RelayObservable.js +9 -9
- package/lib/network/RelayQueryResponseCache.js +8 -6
- package/lib/query/PreloadableQueryRegistry.js +70 -0
- package/lib/query/fetchQueryInternal.js +31 -23
- package/lib/store/DataChecker.js +122 -110
- package/lib/store/RelayConcreteVariables.js +6 -2
- package/lib/store/RelayModernEnvironment.js +121 -67
- package/lib/store/RelayModernFragmentSpecResolver.js +12 -16
- package/lib/store/RelayModernQueryExecutor.js +389 -314
- package/lib/store/RelayModernRecord.js +14 -9
- package/lib/store/RelayModernSelector.js +7 -3
- package/lib/store/RelayModernStore.js +289 -484
- package/lib/store/RelayOperationTracker.js +35 -78
- package/lib/store/RelayOptimisticRecordSource.js +7 -5
- package/lib/store/RelayPublishQueue.js +6 -33
- package/lib/store/RelayReader.js +113 -45
- package/lib/store/RelayRecordSource.js +2 -9
- package/lib/store/RelayRecordSourceMapImpl.js +13 -18
- package/lib/store/RelayReferenceMarker.js +40 -60
- package/lib/store/RelayResponseNormalizer.js +158 -193
- package/lib/store/RelayStoreUtils.js +1 -0
- package/lib/store/StoreInspector.js +8 -8
- package/lib/store/TypeID.js +28 -0
- package/lib/store/cloneRelayScalarHandleSourceField.js +44 -0
- package/lib/store/normalizeRelayPayload.js +6 -2
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +5 -3
- package/lib/util/RelayConcreteNode.js +9 -6
- package/lib/util/RelayError.js +39 -9
- package/lib/util/RelayFeatureFlags.js +2 -5
- package/lib/util/RelayReplaySubject.js +3 -3
- package/lib/util/createPayloadFor3DField.js +7 -2
- package/lib/util/getRequestIdentifier.js +2 -2
- package/lib/util/recycleNodesInto.js +2 -6
- 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 +182 -0
- package/mutations/validateMutation.js.flow +213 -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/PreloadableQueryRegistry.js.flow +65 -0
- package/query/fetchQuery.js.flow +47 -0
- package/query/fetchQueryInternal.js.flow +348 -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 +502 -0
- package/store/RelayConcreteVariables.js.flow +96 -0
- package/store/RelayModernEnvironment.js.flow +551 -0
- package/store/RelayModernFragmentSpecResolver.js.flow +426 -0
- package/store/RelayModernOperationDescriptor.js.flow +88 -0
- package/store/RelayModernQueryExecutor.js.flow +1321 -0
- package/store/RelayModernRecord.js.flow +403 -0
- package/store/RelayModernSelector.js.flow +455 -0
- package/store/RelayModernStore.js.flow +842 -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 +473 -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 +257 -0
- package/store/RelayResponseNormalizer.js.flow +680 -0
- package/store/RelayStoreTypes.js.flow +899 -0
- package/store/RelayStoreUtils.js.flow +219 -0
- package/store/StoreInspector.js.flow +171 -0
- package/store/TypeID.js.flow +28 -0
- package/store/ViewerPattern.js.flow +26 -0
- package/store/cloneRelayHandleSourceField.js.flow +66 -0
- package/store/cloneRelayScalarHandleSourceField.js.flow +62 -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 +198 -0
- package/util/ReaderNode.js.flow +208 -0
- package/util/RelayConcreteNode.js.flow +93 -0
- package/util/RelayDefaultHandleKey.js.flow +17 -0
- package/util/RelayError.js.flow +62 -0
- package/util/RelayFeatureFlags.js.flow +30 -0
- package/util/RelayProfiler.js.flow +284 -0
- package/util/RelayReplaySubject.js.flow +135 -0
- package/util/RelayRuntimeTypes.js.flow +72 -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 +42 -0
- package/util/isPromise.js.flow +21 -0
- package/util/isScalarAndEqual.js.flow +26 -0
- package/util/recycleNodesInto.js.flow +76 -0
- package/util/resolveImmediate.js.flow +30 -0
- package/util/stableCopy.js.flow +35 -0
- package/lib/handlers/RelayDefaultMissingFieldHandlers.js +0 -26
- package/lib/handlers/getRelayDefaultMissingFieldHandlers.js +0 -36
- package/lib/query/RelayModernGraphQLTag.js +0 -104
- package/lib/store/RelayConnection.js +0 -37
- package/lib/store/RelayConnectionResolver.js +0 -178
- package/lib/store/RelayRecordSourceObjectImpl.js +0 -79
- package/lib/util/getFragmentSpecIdentifier.js +0 -27
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
* @flow
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
const ConnectionHandler = require('./ConnectionHandler');
|
|
16
|
+
|
|
17
|
+
const invariant = require('invariant');
|
|
18
|
+
const warning = require('warning');
|
|
19
|
+
|
|
20
|
+
import type {
|
|
21
|
+
RecordProxy,
|
|
22
|
+
HandleFieldPayload,
|
|
23
|
+
RecordSourceProxy,
|
|
24
|
+
Handler,
|
|
25
|
+
} from '../../store/RelayStoreTypes';
|
|
26
|
+
|
|
27
|
+
const DeleteRecordHandler = {
|
|
28
|
+
update: (store: RecordSourceProxy, payload: HandleFieldPayload) => {
|
|
29
|
+
const record = store.get(payload.dataID);
|
|
30
|
+
if (record != null) {
|
|
31
|
+
const id = record.getValue(payload.fieldKey);
|
|
32
|
+
if (typeof id === 'string') {
|
|
33
|
+
store.delete(id);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
const AppendEdgeHandler: Handler = {
|
|
40
|
+
update: edgeUpdater(ConnectionHandler.insertEdgeAfter),
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const PrependEdgeHandler: Handler = {
|
|
44
|
+
update: edgeUpdater(ConnectionHandler.insertEdgeBefore),
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
function edgeUpdater(
|
|
48
|
+
insertFn: (RecordProxy, RecordProxy, ?string) => void,
|
|
49
|
+
): (RecordSourceProxy, HandleFieldPayload) => void {
|
|
50
|
+
return (store: RecordSourceProxy, payload: HandleFieldPayload) => {
|
|
51
|
+
const record = store.get(payload.dataID);
|
|
52
|
+
if (record == null) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const {connections} = payload.handleArgs;
|
|
56
|
+
invariant(
|
|
57
|
+
connections != null,
|
|
58
|
+
'MutationHandlers: Expected connection IDs to be specified.',
|
|
59
|
+
);
|
|
60
|
+
const serverEdge = record.getLinkedRecord(payload.fieldKey, payload.args);
|
|
61
|
+
for (const connectionID of connections) {
|
|
62
|
+
const connection = store.get(connectionID);
|
|
63
|
+
if (connection == null) {
|
|
64
|
+
warning(
|
|
65
|
+
false,
|
|
66
|
+
`[Relay][Mutation] The connection with id '${connectionID}' doesn't exist.`,
|
|
67
|
+
);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
const clientEdge = ConnectionHandler.buildConnectionEdge(
|
|
71
|
+
store,
|
|
72
|
+
connection,
|
|
73
|
+
serverEdge,
|
|
74
|
+
);
|
|
75
|
+
invariant(
|
|
76
|
+
clientEdge != null,
|
|
77
|
+
'MutationHandlers: Failed to build the edge.',
|
|
78
|
+
);
|
|
79
|
+
insertFn(connection, clientEdge);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
module.exports = {
|
|
85
|
+
AppendEdgeHandler,
|
|
86
|
+
DeleteRecordHandler,
|
|
87
|
+
PrependEdgeHandler,
|
|
88
|
+
};
|
package/index.js
CHANGED
package/index.js.flow
ADDED
|
@@ -0,0 +1,320 @@
|
|
|
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
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
// flowlint ambiguous-object-type:error
|
|
12
|
+
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
const ConnectionHandler = require('./handlers/connection/ConnectionHandler');
|
|
16
|
+
const ConnectionInterface = require('./handlers/connection/ConnectionInterface');
|
|
17
|
+
const GraphQLTag = require('./query/GraphQLTag');
|
|
18
|
+
const MutationHandlers = require('./handlers/connection/MutationHandlers');
|
|
19
|
+
const PreloadableQueryRegistry = require('./query/PreloadableQueryRegistry');
|
|
20
|
+
const RelayConcreteNode = require('./util/RelayConcreteNode');
|
|
21
|
+
const RelayConcreteVariables = require('./store/RelayConcreteVariables');
|
|
22
|
+
const RelayDeclarativeMutationConfig = require('./mutations/RelayDeclarativeMutationConfig');
|
|
23
|
+
const RelayDefaultHandleKey = require('./util/RelayDefaultHandleKey');
|
|
24
|
+
const RelayDefaultHandlerProvider = require('./handlers/RelayDefaultHandlerProvider');
|
|
25
|
+
const RelayError = require('./util/RelayError');
|
|
26
|
+
const RelayFeatureFlags = require('./util/RelayFeatureFlags');
|
|
27
|
+
const RelayModernEnvironment = require('./store/RelayModernEnvironment');
|
|
28
|
+
const RelayModernOperationDescriptor = require('./store/RelayModernOperationDescriptor');
|
|
29
|
+
const RelayModernRecord = require('./store/RelayModernRecord');
|
|
30
|
+
const RelayModernSelector = require('./store/RelayModernSelector');
|
|
31
|
+
const RelayModernStore = require('./store/RelayModernStore');
|
|
32
|
+
const RelayNetwork = require('./network/RelayNetwork');
|
|
33
|
+
const RelayObservable = require('./network/RelayObservable');
|
|
34
|
+
const RelayOperationTracker = require('./store/RelayOperationTracker');
|
|
35
|
+
const RelayProfiler = require('./util/RelayProfiler');
|
|
36
|
+
const RelayQueryResponseCache = require('./network/RelayQueryResponseCache');
|
|
37
|
+
const RelayRecordSource = require('./store/RelayRecordSource');
|
|
38
|
+
const RelayReplaySubject = require('./util/RelayReplaySubject');
|
|
39
|
+
const RelayStoreUtils = require('./store/RelayStoreUtils');
|
|
40
|
+
const ViewerPattern = require('./store/ViewerPattern');
|
|
41
|
+
|
|
42
|
+
const applyOptimisticMutation = require('./mutations/applyOptimisticMutation');
|
|
43
|
+
const commitLocalUpdate = require('./mutations/commitLocalUpdate');
|
|
44
|
+
const commitMutation = require('./mutations/commitMutation');
|
|
45
|
+
const createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
|
|
46
|
+
const createPayloadFor3DField = require('./util/createPayloadFor3DField');
|
|
47
|
+
const createRelayContext = require('./store/createRelayContext');
|
|
48
|
+
const deepFreeze = require('./util/deepFreeze');
|
|
49
|
+
const fetchQuery = require('./query/fetchQuery');
|
|
50
|
+
const fetchQueryInternal = require('./query/fetchQueryInternal');
|
|
51
|
+
const getFragmentIdentifier = require('./util/getFragmentIdentifier');
|
|
52
|
+
const getRelayHandleKey = require('./util/getRelayHandleKey');
|
|
53
|
+
const getRequestIdentifier = require('./util/getRequestIdentifier');
|
|
54
|
+
const isPromise = require('./util/isPromise');
|
|
55
|
+
const isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
|
|
56
|
+
const isScalarAndEqual = require('./util/isScalarAndEqual');
|
|
57
|
+
const readInlineData = require('./store/readInlineData');
|
|
58
|
+
const recycleNodesInto = require('./util/recycleNodesInto');
|
|
59
|
+
const requestSubscription = require('./subscription/requestSubscription');
|
|
60
|
+
const stableCopy = require('./util/stableCopy');
|
|
61
|
+
|
|
62
|
+
const {
|
|
63
|
+
generateClientID,
|
|
64
|
+
generateUniqueClientID,
|
|
65
|
+
isClientID,
|
|
66
|
+
} = require('./store/ClientID');
|
|
67
|
+
|
|
68
|
+
export type {ConnectionMetadata} from './handlers/connection/ConnectionHandler';
|
|
69
|
+
export type {
|
|
70
|
+
EdgeRecord,
|
|
71
|
+
PageInfo,
|
|
72
|
+
} from './handlers/connection/ConnectionInterface';
|
|
73
|
+
export type {
|
|
74
|
+
DeclarativeMutationConfig,
|
|
75
|
+
MutationType,
|
|
76
|
+
RangeBehaviors,
|
|
77
|
+
RangeOperation,
|
|
78
|
+
} from './mutations/RelayDeclarativeMutationConfig';
|
|
79
|
+
export type {OptimisticMutationConfig} from './mutations/applyOptimisticMutation';
|
|
80
|
+
export type {
|
|
81
|
+
DEPRECATED_MutationConfig,
|
|
82
|
+
MutationConfig,
|
|
83
|
+
MutationParameters,
|
|
84
|
+
} from './mutations/commitMutation';
|
|
85
|
+
export type {
|
|
86
|
+
ExecuteFunction,
|
|
87
|
+
FetchFunction,
|
|
88
|
+
GraphQLResponse,
|
|
89
|
+
GraphQLResponseWithData,
|
|
90
|
+
GraphQLResponseWithoutData,
|
|
91
|
+
GraphQLSingularResponse,
|
|
92
|
+
INetwork,
|
|
93
|
+
LogRequestInfoFunction,
|
|
94
|
+
PayloadData,
|
|
95
|
+
PayloadError,
|
|
96
|
+
SubscribeFunction,
|
|
97
|
+
Uploadable,
|
|
98
|
+
UploadableMap,
|
|
99
|
+
} from './network/RelayNetworkTypes';
|
|
100
|
+
export type {
|
|
101
|
+
ObservableFromValue,
|
|
102
|
+
Observer,
|
|
103
|
+
Subscribable,
|
|
104
|
+
Subscription,
|
|
105
|
+
} from './network/RelayObservable';
|
|
106
|
+
export type {GraphQLTaggedNode} from './query/GraphQLTag';
|
|
107
|
+
export type {EnvironmentConfig} from './store/RelayModernEnvironment';
|
|
108
|
+
export type {TaskScheduler} from './store/RelayModernQueryExecutor';
|
|
109
|
+
export type {RecordState} from './store/RelayRecordState';
|
|
110
|
+
export type {
|
|
111
|
+
FragmentMap,
|
|
112
|
+
FragmentPointer,
|
|
113
|
+
FragmentReference,
|
|
114
|
+
FragmentSpecResolver,
|
|
115
|
+
HandleFieldPayload,
|
|
116
|
+
IEnvironment,
|
|
117
|
+
InvalidationState,
|
|
118
|
+
LogEvent,
|
|
119
|
+
LogFunction,
|
|
120
|
+
MissingFieldHandler,
|
|
121
|
+
ModuleImportPointer,
|
|
122
|
+
NormalizationSelector,
|
|
123
|
+
OperationAvailability,
|
|
124
|
+
OperationDescriptor,
|
|
125
|
+
OperationLoader,
|
|
126
|
+
OperationTracker,
|
|
127
|
+
OptimisticResponseConfig,
|
|
128
|
+
OptimisticUpdate,
|
|
129
|
+
OptimisticUpdateFunction,
|
|
130
|
+
PluralReaderSelector,
|
|
131
|
+
Props,
|
|
132
|
+
PublishQueue,
|
|
133
|
+
ReaderSelector,
|
|
134
|
+
ReadOnlyRecordProxy,
|
|
135
|
+
RecordProxy,
|
|
136
|
+
RecordSourceProxy,
|
|
137
|
+
RecordSourceSelectorProxy,
|
|
138
|
+
RelayContext,
|
|
139
|
+
RequestDescriptor,
|
|
140
|
+
SelectorData,
|
|
141
|
+
SelectorStoreUpdater,
|
|
142
|
+
SingularReaderSelector,
|
|
143
|
+
Snapshot,
|
|
144
|
+
StoreUpdater,
|
|
145
|
+
} from './store/RelayStoreTypes';
|
|
146
|
+
export type {GraphQLSubscriptionConfig} from './subscription/requestSubscription';
|
|
147
|
+
export type {JSResourceReference} from './util/JSResourceTypes.flow';
|
|
148
|
+
export type {
|
|
149
|
+
NormalizationArgument,
|
|
150
|
+
NormalizationDefer,
|
|
151
|
+
NormalizationField,
|
|
152
|
+
NormalizationLinkedField,
|
|
153
|
+
NormalizationLinkedHandle,
|
|
154
|
+
NormalizationLocalArgumentDefinition,
|
|
155
|
+
NormalizationModuleImport,
|
|
156
|
+
NormalizationScalarField,
|
|
157
|
+
NormalizationSelection,
|
|
158
|
+
NormalizationSplitOperation,
|
|
159
|
+
NormalizationStream,
|
|
160
|
+
NormalizationTypeDiscriminator,
|
|
161
|
+
} from './util/NormalizationNode';
|
|
162
|
+
export type {NormalizationOperation} from './util/NormalizationNode';
|
|
163
|
+
export type {
|
|
164
|
+
ReaderArgument,
|
|
165
|
+
ReaderArgumentDefinition,
|
|
166
|
+
ReaderField,
|
|
167
|
+
ReaderFragment,
|
|
168
|
+
ReaderInlineDataFragment,
|
|
169
|
+
ReaderInlineDataFragmentSpread,
|
|
170
|
+
ReaderLinkedField,
|
|
171
|
+
ReaderModuleImport,
|
|
172
|
+
ReaderPaginationMetadata,
|
|
173
|
+
ReaderRefetchableFragment,
|
|
174
|
+
ReaderRefetchMetadata,
|
|
175
|
+
ReaderScalarField,
|
|
176
|
+
ReaderSelection,
|
|
177
|
+
} from './util/ReaderNode';
|
|
178
|
+
export type {
|
|
179
|
+
ConcreteRequest,
|
|
180
|
+
GeneratedNode,
|
|
181
|
+
RequestParameters,
|
|
182
|
+
} from './util/RelayConcreteNode';
|
|
183
|
+
export type {
|
|
184
|
+
CacheConfig,
|
|
185
|
+
DataID,
|
|
186
|
+
Disposable,
|
|
187
|
+
FetchPolicy,
|
|
188
|
+
FetchQueryFetchPolicy,
|
|
189
|
+
OperationType,
|
|
190
|
+
RenderPolicy,
|
|
191
|
+
Variables,
|
|
192
|
+
VariablesOf,
|
|
193
|
+
} from './util/RelayRuntimeTypes';
|
|
194
|
+
export type {Local3DPayload} from './util/createPayloadFor3DField';
|
|
195
|
+
|
|
196
|
+
// As early as possible, check for the existence of the JavaScript globals which
|
|
197
|
+
// Relay Runtime relies upon, and produce a clear message if they do not exist.
|
|
198
|
+
if (__DEV__) {
|
|
199
|
+
const mapStr = typeof Map !== 'function' ? 'Map' : null;
|
|
200
|
+
const setStr = typeof Set !== 'function' ? 'Set' : null;
|
|
201
|
+
const promiseStr = typeof Promise !== 'function' ? 'Promise' : null;
|
|
202
|
+
const objStr = typeof Object.assign !== 'function' ? 'Object.assign' : null;
|
|
203
|
+
if (mapStr || setStr || promiseStr || objStr) {
|
|
204
|
+
throw new Error(
|
|
205
|
+
`relay-runtime requires ${[mapStr, setStr, promiseStr, objStr]
|
|
206
|
+
.filter(Boolean)
|
|
207
|
+
.join(', and ')} to exist. ` +
|
|
208
|
+
'Use a polyfill to provide these for older browsers.',
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* The public interface to Relay Runtime.
|
|
215
|
+
*/
|
|
216
|
+
module.exports = {
|
|
217
|
+
// Core API
|
|
218
|
+
Environment: RelayModernEnvironment,
|
|
219
|
+
Network: RelayNetwork,
|
|
220
|
+
Observable: RelayObservable,
|
|
221
|
+
QueryResponseCache: RelayQueryResponseCache,
|
|
222
|
+
RecordSource: RelayRecordSource,
|
|
223
|
+
Record: RelayModernRecord,
|
|
224
|
+
ReplaySubject: RelayReplaySubject,
|
|
225
|
+
Store: RelayModernStore,
|
|
226
|
+
|
|
227
|
+
areEqualSelectors: RelayModernSelector.areEqualSelectors,
|
|
228
|
+
createFragmentSpecResolver: createFragmentSpecResolver,
|
|
229
|
+
createNormalizationSelector: RelayModernSelector.createNormalizationSelector,
|
|
230
|
+
createOperationDescriptor:
|
|
231
|
+
RelayModernOperationDescriptor.createOperationDescriptor,
|
|
232
|
+
createReaderSelector: RelayModernSelector.createReaderSelector,
|
|
233
|
+
createRequestDescriptor:
|
|
234
|
+
RelayModernOperationDescriptor.createRequestDescriptor,
|
|
235
|
+
getDataIDsFromFragment: RelayModernSelector.getDataIDsFromFragment,
|
|
236
|
+
getDataIDsFromObject: RelayModernSelector.getDataIDsFromObject,
|
|
237
|
+
getFragment: GraphQLTag.getFragment,
|
|
238
|
+
getInlineDataFragment: GraphQLTag.getInlineDataFragment,
|
|
239
|
+
getModuleComponentKey: RelayStoreUtils.getModuleComponentKey,
|
|
240
|
+
getModuleOperationKey: RelayStoreUtils.getModuleOperationKey,
|
|
241
|
+
getPaginationFragment: GraphQLTag.getPaginationFragment,
|
|
242
|
+
getPluralSelector: RelayModernSelector.getPluralSelector,
|
|
243
|
+
getRefetchableFragment: GraphQLTag.getRefetchableFragment,
|
|
244
|
+
getRequest: GraphQLTag.getRequest,
|
|
245
|
+
getRequestIdentifier: getRequestIdentifier,
|
|
246
|
+
getSelector: RelayModernSelector.getSelector,
|
|
247
|
+
getSelectorsFromObject: RelayModernSelector.getSelectorsFromObject,
|
|
248
|
+
getSingularSelector: RelayModernSelector.getSingularSelector,
|
|
249
|
+
getStorageKey: RelayStoreUtils.getStorageKey,
|
|
250
|
+
getVariablesFromFragment: RelayModernSelector.getVariablesFromFragment,
|
|
251
|
+
getVariablesFromObject: RelayModernSelector.getVariablesFromObject,
|
|
252
|
+
getVariablesFromPluralFragment:
|
|
253
|
+
RelayModernSelector.getVariablesFromPluralFragment,
|
|
254
|
+
getVariablesFromSingularFragment:
|
|
255
|
+
RelayModernSelector.getVariablesFromSingularFragment,
|
|
256
|
+
graphql: GraphQLTag.graphql,
|
|
257
|
+
readInlineData,
|
|
258
|
+
|
|
259
|
+
// Declarative mutation API
|
|
260
|
+
MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
|
|
261
|
+
RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
|
|
262
|
+
|
|
263
|
+
// Extensions
|
|
264
|
+
DefaultHandlerProvider: RelayDefaultHandlerProvider,
|
|
265
|
+
ConnectionHandler,
|
|
266
|
+
MutationHandlers,
|
|
267
|
+
VIEWER_ID: ViewerPattern.VIEWER_ID,
|
|
268
|
+
VIEWER_TYPE: ViewerPattern.VIEWER_TYPE,
|
|
269
|
+
|
|
270
|
+
// Helpers (can be implemented via the above API)
|
|
271
|
+
applyOptimisticMutation,
|
|
272
|
+
commitLocalUpdate,
|
|
273
|
+
commitMutation,
|
|
274
|
+
fetchQuery,
|
|
275
|
+
isRelayModernEnvironment,
|
|
276
|
+
requestSubscription,
|
|
277
|
+
|
|
278
|
+
// Configuration interface for legacy or special uses
|
|
279
|
+
ConnectionInterface,
|
|
280
|
+
|
|
281
|
+
// Utilities
|
|
282
|
+
PreloadableQueryRegistry,
|
|
283
|
+
RelayProfiler: RelayProfiler,
|
|
284
|
+
createPayloadFor3DField: createPayloadFor3DField,
|
|
285
|
+
|
|
286
|
+
// INTERNAL-ONLY: These exports might be removed at any point.
|
|
287
|
+
RelayConcreteNode: RelayConcreteNode,
|
|
288
|
+
RelayError: RelayError,
|
|
289
|
+
RelayFeatureFlags: RelayFeatureFlags,
|
|
290
|
+
DEFAULT_HANDLE_KEY: RelayDefaultHandleKey.DEFAULT_HANDLE_KEY,
|
|
291
|
+
FRAGMENTS_KEY: RelayStoreUtils.FRAGMENTS_KEY,
|
|
292
|
+
FRAGMENT_OWNER_KEY: RelayStoreUtils.FRAGMENT_OWNER_KEY,
|
|
293
|
+
ID_KEY: RelayStoreUtils.ID_KEY,
|
|
294
|
+
REF_KEY: RelayStoreUtils.REF_KEY,
|
|
295
|
+
REFS_KEY: RelayStoreUtils.REFS_KEY,
|
|
296
|
+
ROOT_ID: RelayStoreUtils.ROOT_ID,
|
|
297
|
+
ROOT_TYPE: RelayStoreUtils.ROOT_TYPE,
|
|
298
|
+
TYPENAME_KEY: RelayStoreUtils.TYPENAME_KEY,
|
|
299
|
+
|
|
300
|
+
deepFreeze: deepFreeze,
|
|
301
|
+
generateClientID: generateClientID,
|
|
302
|
+
generateUniqueClientID: generateUniqueClientID,
|
|
303
|
+
getRelayHandleKey: getRelayHandleKey,
|
|
304
|
+
isClientID: isClientID,
|
|
305
|
+
isPromise: isPromise,
|
|
306
|
+
isScalarAndEqual: isScalarAndEqual,
|
|
307
|
+
recycleNodesInto: recycleNodesInto,
|
|
308
|
+
stableCopy: stableCopy,
|
|
309
|
+
getFragmentIdentifier: getFragmentIdentifier,
|
|
310
|
+
__internal: {
|
|
311
|
+
OperationTracker: RelayOperationTracker,
|
|
312
|
+
createRelayContext: createRelayContext,
|
|
313
|
+
getOperationVariables: RelayConcreteVariables.getOperationVariables,
|
|
314
|
+
fetchQuery: fetchQueryInternal.fetchQuery,
|
|
315
|
+
fetchQueryDeduped: fetchQueryInternal.fetchQueryDeduped,
|
|
316
|
+
getPromiseForActiveRequest: fetchQueryInternal.getPromiseForActiveRequest,
|
|
317
|
+
getObservableForActiveRequest:
|
|
318
|
+
fetchQueryInternal.getObservableForActiveRequest,
|
|
319
|
+
},
|
|
320
|
+
};
|
|
@@ -10,14 +10,25 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var ConnectionHandler = require('./connection/ConnectionHandler');
|
|
14
|
+
|
|
15
|
+
var MutationHandlers = require('./connection/MutationHandlers');
|
|
14
16
|
|
|
15
17
|
var invariant = require("fbjs/lib/invariant");
|
|
16
18
|
|
|
17
19
|
function RelayDefaultHandlerProvider(handle) {
|
|
18
20
|
switch (handle) {
|
|
19
21
|
case 'connection':
|
|
20
|
-
return
|
|
22
|
+
return ConnectionHandler;
|
|
23
|
+
|
|
24
|
+
case 'deleteRecord':
|
|
25
|
+
return MutationHandlers.DeleteRecordHandler;
|
|
26
|
+
|
|
27
|
+
case 'appendEdge':
|
|
28
|
+
return MutationHandlers.AppendEdgeHandler;
|
|
29
|
+
|
|
30
|
+
case 'prependEdge':
|
|
31
|
+
return MutationHandlers.PrependEdgeHandler;
|
|
21
32
|
}
|
|
22
33
|
|
|
23
34
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayDefaultHandlerProvider: No handler provided for `%s`.', handle) : invariant(false) : void 0;
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
// flowlint ambiguous-object-type:error
|
|
11
11
|
'use strict';
|
|
12
12
|
|
|
13
|
-
var
|
|
13
|
+
var ConnectionInterface = require('./ConnectionInterface');
|
|
14
14
|
|
|
15
15
|
var getRelayHandleKey = require('../../util/getRelayHandleKey');
|
|
16
16
|
|
|
@@ -33,22 +33,20 @@ var NEXT_EDGE_INDEX = '__connection_next_edge_index';
|
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
function update(store, payload) {
|
|
36
|
-
var _clientConnectionFiel;
|
|
37
|
-
|
|
38
36
|
var record = store.get(payload.dataID);
|
|
39
37
|
|
|
40
38
|
if (!record) {
|
|
41
39
|
return;
|
|
42
40
|
}
|
|
43
41
|
|
|
44
|
-
var
|
|
45
|
-
EDGES =
|
|
46
|
-
END_CURSOR =
|
|
47
|
-
HAS_NEXT_PAGE =
|
|
48
|
-
HAS_PREV_PAGE =
|
|
49
|
-
PAGE_INFO =
|
|
50
|
-
PAGE_INFO_TYPE =
|
|
51
|
-
START_CURSOR =
|
|
42
|
+
var _ConnectionInterface$ = ConnectionInterface.get(),
|
|
43
|
+
EDGES = _ConnectionInterface$.EDGES,
|
|
44
|
+
END_CURSOR = _ConnectionInterface$.END_CURSOR,
|
|
45
|
+
HAS_NEXT_PAGE = _ConnectionInterface$.HAS_NEXT_PAGE,
|
|
46
|
+
HAS_PREV_PAGE = _ConnectionInterface$.HAS_PREV_PAGE,
|
|
47
|
+
PAGE_INFO = _ConnectionInterface$.PAGE_INFO,
|
|
48
|
+
PAGE_INFO_TYPE = _ConnectionInterface$.PAGE_INFO_TYPE,
|
|
49
|
+
START_CURSOR = _ConnectionInterface$.START_CURSOR;
|
|
52
50
|
|
|
53
51
|
var serverConnection = record.getLinkedRecord(payload.fieldKey);
|
|
54
52
|
var serverPageInfo = serverConnection && serverConnection.getLinkedRecord(PAGE_INFO);
|
|
@@ -64,7 +62,7 @@ function update(store, payload) {
|
|
|
64
62
|
|
|
65
63
|
var clientConnectionID = generateClientID(record.getDataID(), payload.handleKey);
|
|
66
64
|
var clientConnectionField = record.getLinkedRecord(payload.handleKey);
|
|
67
|
-
var clientConnection =
|
|
65
|
+
var clientConnection = clientConnectionField !== null && clientConnectionField !== void 0 ? clientConnectionField : store.get(clientConnectionID);
|
|
68
66
|
var clientPageInfo = clientConnection && clientConnection.getLinkedRecord(PAGE_INFO);
|
|
69
67
|
|
|
70
68
|
if (!clientConnection) {
|
|
@@ -139,7 +137,7 @@ function update(store, payload) {
|
|
|
139
137
|
mergeEdges(prevEdges, nextEdges, nodeIDs);
|
|
140
138
|
mergeEdges(_serverEdges, nextEdges, nodeIDs);
|
|
141
139
|
} else {
|
|
142
|
-
process.env.NODE_ENV !== "production" ? warning(false, '
|
|
140
|
+
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;
|
|
143
141
|
return;
|
|
144
142
|
}
|
|
145
143
|
} else if (args.before != null) {
|
|
@@ -150,7 +148,7 @@ function update(store, payload) {
|
|
|
150
148
|
mergeEdges(_serverEdges, nextEdges, _nodeIDs);
|
|
151
149
|
mergeEdges(prevEdges, nextEdges, _nodeIDs);
|
|
152
150
|
} else {
|
|
153
|
-
process.env.NODE_ENV !== "production" ? warning(false, '
|
|
151
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected before cursor `%s`, edges must ' + 'be fetched from the beginning of the list (`%s`).', args.before, clientPageInfo && clientPageInfo.getValue(START_CURSOR)) : void 0;
|
|
154
152
|
return;
|
|
155
153
|
}
|
|
156
154
|
} else {
|
|
@@ -221,7 +219,7 @@ function update(store, payload) {
|
|
|
221
219
|
* ```
|
|
222
220
|
* store => {
|
|
223
221
|
* const user = store.get('<id>');
|
|
224
|
-
* const friends =
|
|
222
|
+
* const friends = ConnectionHandler.getConnection(user, 'FriendsFragment_friends');
|
|
225
223
|
* // Access fields on the connection:
|
|
226
224
|
* const edges = friends.getLinkedRecords('edges');
|
|
227
225
|
* }
|
|
@@ -265,18 +263,18 @@ function getConnection(record, key, filters) {
|
|
|
265
263
|
* ```
|
|
266
264
|
* store => {
|
|
267
265
|
* const user = store.get('<id>');
|
|
268
|
-
* const friends =
|
|
266
|
+
* const friends = ConnectionHandler.getConnection(user, 'FriendsFragment_friends');
|
|
269
267
|
* const edge = store.create('<edge-id>', 'FriendsEdge');
|
|
270
|
-
*
|
|
268
|
+
* ConnectionHandler.insertEdgeAfter(friends, edge);
|
|
271
269
|
* }
|
|
272
270
|
* ```
|
|
273
271
|
*/
|
|
274
272
|
|
|
275
273
|
|
|
276
274
|
function insertEdgeAfter(record, newEdge, cursor) {
|
|
277
|
-
var
|
|
278
|
-
CURSOR =
|
|
279
|
-
EDGES =
|
|
275
|
+
var _ConnectionInterface$2 = ConnectionInterface.get(),
|
|
276
|
+
CURSOR = _ConnectionInterface$2.CURSOR,
|
|
277
|
+
EDGES = _ConnectionInterface$2.EDGES;
|
|
280
278
|
|
|
281
279
|
var edges = record.getLinkedRecords(EDGES);
|
|
282
280
|
|
|
@@ -324,8 +322,8 @@ function insertEdgeAfter(record, newEdge, cursor) {
|
|
|
324
322
|
|
|
325
323
|
|
|
326
324
|
function createEdge(store, record, node, edgeType) {
|
|
327
|
-
var
|
|
328
|
-
NODE =
|
|
325
|
+
var _ConnectionInterface$3 = ConnectionInterface.get(),
|
|
326
|
+
NODE = _ConnectionInterface$3.NODE; // An index-based client ID could easily conflict (unless it was
|
|
329
327
|
// auto-incrementing, but there is nowhere to the store the id)
|
|
330
328
|
// Instead, construct a client ID based on the connection ID and node ID,
|
|
331
329
|
// which will only conflict if the same node is added to the same connection
|
|
@@ -371,18 +369,18 @@ function createEdge(store, record, node, edgeType) {
|
|
|
371
369
|
* ```
|
|
372
370
|
* store => {
|
|
373
371
|
* const user = store.get('<id>');
|
|
374
|
-
* const friends =
|
|
372
|
+
* const friends = ConnectionHandler.getConnection(user, 'FriendsFragment_friends');
|
|
375
373
|
* const edge = store.create('<edge-id>', 'FriendsEdge');
|
|
376
|
-
*
|
|
374
|
+
* ConnectionHandler.insertEdgeBefore(friends, edge);
|
|
377
375
|
* }
|
|
378
376
|
* ```
|
|
379
377
|
*/
|
|
380
378
|
|
|
381
379
|
|
|
382
380
|
function insertEdgeBefore(record, newEdge, cursor) {
|
|
383
|
-
var
|
|
384
|
-
CURSOR =
|
|
385
|
-
EDGES =
|
|
381
|
+
var _ConnectionInterface$4 = ConnectionInterface.get(),
|
|
382
|
+
CURSOR = _ConnectionInterface$4.CURSOR,
|
|
383
|
+
EDGES = _ConnectionInterface$4.EDGES;
|
|
386
384
|
|
|
387
385
|
var edges = record.getLinkedRecords(EDGES);
|
|
388
386
|
|
|
@@ -429,9 +427,9 @@ function insertEdgeBefore(record, newEdge, cursor) {
|
|
|
429
427
|
|
|
430
428
|
|
|
431
429
|
function deleteNode(record, nodeID) {
|
|
432
|
-
var
|
|
433
|
-
EDGES =
|
|
434
|
-
NODE =
|
|
430
|
+
var _ConnectionInterface$5 = ConnectionInterface.get(),
|
|
431
|
+
EDGES = _ConnectionInterface$5.EDGES,
|
|
432
|
+
NODE = _ConnectionInterface$5.NODE;
|
|
435
433
|
|
|
436
434
|
var edges = record.getLinkedRecords(EDGES);
|
|
437
435
|
|
|
@@ -478,11 +476,11 @@ function buildConnectionEdge(store, connection, edge) {
|
|
|
478
476
|
return edge;
|
|
479
477
|
}
|
|
480
478
|
|
|
481
|
-
var
|
|
482
|
-
EDGES =
|
|
479
|
+
var _ConnectionInterface$6 = ConnectionInterface.get(),
|
|
480
|
+
EDGES = _ConnectionInterface$6.EDGES;
|
|
483
481
|
|
|
484
482
|
var edgeIndex = connection.getValue(NEXT_EDGE_INDEX);
|
|
485
|
-
!(typeof edgeIndex === 'number') ? process.env.NODE_ENV !== "production" ? invariant(false, '
|
|
483
|
+
!(typeof edgeIndex === 'number') ? process.env.NODE_ENV !== "production" ? invariant(false, 'ConnectionHandler: Expected %s to be a number, got `%s`.', NEXT_EDGE_INDEX, edgeIndex) : invariant(false) : void 0;
|
|
486
484
|
var edgeID = generateClientID(connection.getDataID(), EDGES, edgeIndex);
|
|
487
485
|
var connectionEdge = store.create(edgeID, edge.getType());
|
|
488
486
|
connectionEdge.copyFieldsFrom(edge);
|
|
@@ -498,8 +496,8 @@ function buildConnectionEdge(store, connection, edge) {
|
|
|
498
496
|
|
|
499
497
|
|
|
500
498
|
function mergeEdges(sourceEdges, targetEdges, nodeIDs) {
|
|
501
|
-
var
|
|
502
|
-
NODE =
|
|
499
|
+
var _ConnectionInterface$7 = ConnectionInterface.get(),
|
|
500
|
+
NODE = _ConnectionInterface$7.NODE;
|
|
503
501
|
|
|
504
502
|
for (var ii = 0; ii < sourceEdges.length; ii++) {
|
|
505
503
|
var edge = sourceEdges[ii];
|
|
@@ -36,7 +36,7 @@ var config = {
|
|
|
36
36
|
* Defines logic relevant to the informal "Connection" GraphQL interface.
|
|
37
37
|
*/
|
|
38
38
|
|
|
39
|
-
var
|
|
39
|
+
var ConnectionInterface = {
|
|
40
40
|
inject: function inject(newConfig) {
|
|
41
41
|
config = newConfig;
|
|
42
42
|
},
|
|
@@ -53,4 +53,4 @@ var RelayConnectionInterface = {
|
|
|
53
53
|
return CONNECTION_CALLS.hasOwnProperty(call.name);
|
|
54
54
|
}
|
|
55
55
|
};
|
|
56
|
-
module.exports =
|
|
56
|
+
module.exports = ConnectionInterface;
|