relay-runtime 2.0.0-rc.2 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/index.js +1 -1
- package/lib/{generateRelayClientID.js → ClientID.js} +10 -3
- package/lib/ConvertToExecuteFunction.js +6 -4
- package/lib/DataChecker.js +88 -69
- package/lib/NormalizationNode.js +1 -1
- package/lib/ReaderNode.js +1 -1
- package/lib/RelayCombinedEnvironmentTypes.js +1 -1
- package/lib/RelayConcreteNode.js +5 -2
- package/lib/RelayConcreteVariables.js +15 -9
- package/lib/RelayConnectionHandler.js +27 -20
- package/lib/RelayConnectionInterface.js +4 -2
- package/lib/RelayCore.js +48 -15
- package/lib/RelayDeclarativeMutationConfig.js +16 -15
- package/lib/RelayDefaultHandleKey.js +1 -1
- package/lib/RelayDefaultHandlerProvider.js +7 -6
- package/lib/RelayDefaultMissingFieldHandlers.js +26 -0
- package/lib/RelayError.js +7 -2
- package/lib/RelayFeatureFlags.js +16 -0
- package/lib/RelayInMemoryRecordSource.js +8 -2
- package/lib/RelayModernEnvironment.js +159 -237
- package/lib/RelayModernFragmentOwner.js +72 -0
- package/lib/RelayModernFragmentSpecResolver.js +66 -15
- package/lib/RelayModernGraphQLTag.js +9 -5
- package/lib/RelayModernOperationDescriptor.js +9 -6
- package/lib/RelayModernQueryExecutor.js +791 -0
- package/lib/RelayModernRecord.js +44 -24
- package/lib/RelayModernSelector.js +208 -82
- package/lib/RelayModernStore.js +66 -34
- package/lib/RelayNetwork.js +14 -7
- package/lib/RelayNetworkLogger.js +6 -2
- package/lib/RelayNetworkLoggerTransaction.js +8 -4
- package/lib/RelayNetworkTypes.js +1 -1
- package/lib/RelayObservable.js +72 -41
- package/lib/RelayOperationTracker.js +265 -0
- package/lib/RelayProfiler.js +10 -6
- package/lib/RelayPublishQueue.js +66 -47
- package/lib/RelayQueryResponseCache.js +11 -5
- package/lib/RelayReader.js +135 -126
- package/lib/RelayRecordProxy.js +24 -20
- package/lib/RelayRecordSourceMutator.js +88 -25
- package/lib/RelayRecordSourceProxy.js +38 -19
- package/lib/RelayRecordSourceSelectorProxy.js +10 -7
- package/lib/RelayRecordState.js +1 -1
- package/lib/RelayReferenceMarker.js +66 -55
- package/lib/RelayReplaySubject.js +134 -0
- package/lib/RelayResponseNormalizer.js +245 -134
- package/lib/RelayRuntimeTypes.js +1 -1
- package/lib/RelayStoreUtils.js +55 -16
- package/lib/RelayViewerHandler.js +8 -50
- package/lib/StoreInspector.js +171 -0
- package/lib/applyRelayModernOptimisticMutation.js +8 -2
- package/lib/cloneRelayHandleSourceField.js +17 -7
- package/lib/commitLocalUpdate.js +1 -1
- package/lib/commitRelayModernMutation.js +33 -13
- package/lib/createRelayContext.js +27 -0
- package/lib/createRelayNetworkLogger.js +8 -2
- package/lib/deepFreeze.js +1 -1
- package/lib/defaultGetDataID.js +24 -0
- package/lib/fetchQueryInternal.js +232 -0
- package/lib/fetchRelayModernQuery.js +5 -3
- package/lib/getFragmentIdentifier.js +52 -0
- package/lib/getFragmentSpecIdentifier.js +26 -0
- package/lib/getRelayHandleKey.js +8 -2
- package/lib/getRequestParametersIdentifier.js +26 -0
- package/lib/hasOverlappingIDs.js +1 -1
- package/lib/index.js +155 -53
- package/lib/isPromise.js +1 -1
- package/lib/isScalarAndEqual.js +1 -1
- package/lib/normalizeRelayPayload.js +19 -10
- package/lib/recycleNodesInto.js +23 -5
- package/lib/requestRelaySubscription.js +9 -3
- package/lib/validateMutation.js +13 -6
- package/package.json +2 -2
- package/relay-runtime.js +2 -2
- package/relay-runtime.min.js +2 -2
- package/lib/normalizePayload.js +0 -37
- package/lib/simpleClone.js +0 -27
package/lib/RelayCore.js
CHANGED
|
@@ -9,31 +9,64 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var RelayModernFragmentSpecResolver = require("./RelayModernFragmentSpecResolver");
|
|
13
|
+
|
|
14
|
+
var warning = require("fbjs/lib/warning");
|
|
15
|
+
|
|
16
|
+
var _require = require("./RelayModernGraphQLTag"),
|
|
17
|
+
getFragment = _require.getFragment,
|
|
18
|
+
getPaginationFragment = _require.getPaginationFragment,
|
|
19
|
+
getRefetchableFragment = _require.getRefetchableFragment,
|
|
20
|
+
getRequest = _require.getRequest,
|
|
21
|
+
isFragment = _require.isFragment,
|
|
22
|
+
isRequest = _require.isRequest;
|
|
23
|
+
|
|
24
|
+
var _require2 = require("./RelayModernOperationDescriptor"),
|
|
25
|
+
createOperationDescriptor = _require2.createOperationDescriptor;
|
|
26
|
+
|
|
27
|
+
var _require3 = require("./RelayModernSelector"),
|
|
28
|
+
areEqualSelectors = _require3.areEqualSelectors,
|
|
29
|
+
getDataIDsFromFragment = _require3.getDataIDsFromFragment,
|
|
30
|
+
getDataIDsFromObject = _require3.getDataIDsFromObject,
|
|
31
|
+
getSingularSelector = _require3.getSingularSelector,
|
|
32
|
+
getPluralSelector = _require3.getPluralSelector,
|
|
33
|
+
getSelector = _require3.getSelector,
|
|
34
|
+
getSelectorsFromObject = _require3.getSelectorsFromObject,
|
|
35
|
+
getVariablesFromSingularFragment = _require3.getVariablesFromSingularFragment,
|
|
36
|
+
getVariablesFromPluralFragment = _require3.getVariablesFromPluralFragment,
|
|
37
|
+
getVariablesFromFragment = _require3.getVariablesFromFragment,
|
|
38
|
+
getVariablesFromObject = _require3.getVariablesFromObject;
|
|
39
|
+
|
|
12
40
|
function createFragmentSpecResolver(context, containerName, fragments, props, callback) {
|
|
13
41
|
if (process.env.NODE_ENV !== "production") {
|
|
14
42
|
var fragmentNames = Object.keys(fragments);
|
|
15
43
|
fragmentNames.forEach(function (fragmentName) {
|
|
16
44
|
var propValue = props[fragmentName];
|
|
17
|
-
process.env.NODE_ENV !== "production" ?
|
|
45
|
+
process.env.NODE_ENV !== "production" ? warning(propValue !== undefined, 'createFragmentSpecResolver: Expected prop `%s` to be supplied to `%s`, but ' + 'got `undefined`. Pass an explicit `null` if this is intentional.', fragmentName, containerName) : void 0;
|
|
18
46
|
});
|
|
19
47
|
}
|
|
20
48
|
|
|
21
|
-
return new
|
|
49
|
+
return new RelayModernFragmentSpecResolver(context, fragments, props, callback);
|
|
22
50
|
}
|
|
23
51
|
|
|
24
52
|
module.exports = {
|
|
25
|
-
areEqualSelectors:
|
|
53
|
+
areEqualSelectors: areEqualSelectors,
|
|
26
54
|
createFragmentSpecResolver: createFragmentSpecResolver,
|
|
27
|
-
createOperationDescriptor:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
55
|
+
createOperationDescriptor: createOperationDescriptor,
|
|
56
|
+
getDataIDsFromFragment: getDataIDsFromFragment,
|
|
57
|
+
getDataIDsFromObject: getDataIDsFromObject,
|
|
58
|
+
getFragment: getFragment,
|
|
59
|
+
getPaginationFragment: getPaginationFragment,
|
|
60
|
+
getRefetchableFragment: getRefetchableFragment,
|
|
61
|
+
getRequest: getRequest,
|
|
62
|
+
getSingularSelector: getSingularSelector,
|
|
63
|
+
getPluralSelector: getPluralSelector,
|
|
64
|
+
getSelector: getSelector,
|
|
65
|
+
getSelectorsFromObject: getSelectorsFromObject,
|
|
66
|
+
getVariablesFromSingularFragment: getVariablesFromSingularFragment,
|
|
67
|
+
getVariablesFromPluralFragment: getVariablesFromPluralFragment,
|
|
68
|
+
getVariablesFromFragment: getVariablesFromFragment,
|
|
69
|
+
getVariablesFromObject: getVariablesFromObject,
|
|
70
|
+
isFragment: isFragment,
|
|
71
|
+
isRequest: isRequest
|
|
39
72
|
};
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var RelayConnectionHandler = require("./RelayConnectionHandler");
|
|
13
|
+
|
|
14
|
+
var warning = require("fbjs/lib/warning");
|
|
15
|
+
|
|
12
16
|
var MutationTypes = Object.freeze({
|
|
13
17
|
RANGE_ADD: 'RANGE_ADD',
|
|
14
18
|
RANGE_DELETE: 'RANGE_DELETE',
|
|
@@ -107,7 +111,7 @@ function rangeAdd(config, request) {
|
|
|
107
111
|
edgeName = config.edgeName;
|
|
108
112
|
|
|
109
113
|
if (!parentID) {
|
|
110
|
-
process.env.NODE_ENV !== "production" ?
|
|
114
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_ADD ' + 'to work you must include a parentID') : void 0;
|
|
111
115
|
return null;
|
|
112
116
|
}
|
|
113
117
|
|
|
@@ -143,13 +147,13 @@ function rangeAdd(config, request) {
|
|
|
143
147
|
continue;
|
|
144
148
|
}
|
|
145
149
|
|
|
146
|
-
var connection =
|
|
150
|
+
var connection = RelayConnectionHandler.getConnection(parent, info.key, info.filters);
|
|
147
151
|
|
|
148
152
|
if (!connection) {
|
|
149
153
|
continue;
|
|
150
154
|
}
|
|
151
155
|
|
|
152
|
-
var clientEdge =
|
|
156
|
+
var clientEdge = RelayConnectionHandler.buildConnectionEdge(store, connection, serverEdge);
|
|
153
157
|
|
|
154
158
|
if (!clientEdge) {
|
|
155
159
|
continue;
|
|
@@ -157,8 +161,7 @@ function rangeAdd(config, request) {
|
|
|
157
161
|
|
|
158
162
|
switch (info.rangeBehavior) {
|
|
159
163
|
case 'append':
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
RelayConnectionHandler.insertEdgeAfter(connection, clientEdge);
|
|
162
165
|
break;
|
|
163
166
|
|
|
164
167
|
case 'ignore':
|
|
@@ -166,12 +169,11 @@ function rangeAdd(config, request) {
|
|
|
166
169
|
break;
|
|
167
170
|
|
|
168
171
|
case 'prepend':
|
|
169
|
-
|
|
170
|
-
|
|
172
|
+
RelayConnectionHandler.insertEdgeBefore(connection, clientEdge);
|
|
171
173
|
break;
|
|
172
174
|
|
|
173
175
|
default:
|
|
174
|
-
process.env.NODE_ENV !== "production" ?
|
|
176
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_ADD range behavior `%s` ' + 'will not work as expected in RelayModern, supported range ' + "behaviors are 'append', 'prepend', and 'ignore'.", info.rangeBehavior) : void 0;
|
|
175
177
|
break;
|
|
176
178
|
}
|
|
177
179
|
}
|
|
@@ -199,7 +201,7 @@ function rangeDelete(config, request) {
|
|
|
199
201
|
deletedIDFieldName = config.deletedIDFieldName;
|
|
200
202
|
|
|
201
203
|
if (!parentID) {
|
|
202
|
-
process.env.NODE_ENV !== "production" ?
|
|
204
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: For mutation config RANGE_DELETE ' + 'to work you must include a parentID') : void 0;
|
|
203
205
|
return null;
|
|
204
206
|
}
|
|
205
207
|
|
|
@@ -273,7 +275,7 @@ function rangeDelete(config, request) {
|
|
|
273
275
|
}
|
|
274
276
|
|
|
275
277
|
function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs) {
|
|
276
|
-
process.env.NODE_ENV !== "production" ?
|
|
278
|
+
process.env.NODE_ENV !== "production" ? warning(connectionKeys, 'RelayDeclarativeMutationConfig: RANGE_DELETE must provide a ' + 'connectionKeys') : void 0;
|
|
277
279
|
var parent = store.get(parentID);
|
|
278
280
|
|
|
279
281
|
if (!parent) {
|
|
@@ -281,7 +283,7 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
|
|
|
281
283
|
}
|
|
282
284
|
|
|
283
285
|
if (pathToConnection.length < 2) {
|
|
284
|
-
process.env.NODE_ENV !== "production" ?
|
|
286
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection must include at least parent and connection') : void 0;
|
|
285
287
|
return;
|
|
286
288
|
}
|
|
287
289
|
|
|
@@ -295,7 +297,7 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
|
|
|
295
297
|
|
|
296
298
|
|
|
297
299
|
if (!connectionKeys || !recordProxy) {
|
|
298
|
-
process.env.NODE_ENV !== "production" ?
|
|
300
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'RelayDeclarativeMutationConfig: RANGE_DELETE ' + 'pathToConnection is incorrect. Unable to find connection with ' + 'parentID: %s and path: %s', parentID, pathToConnection.toString()) : void 0;
|
|
299
301
|
return;
|
|
300
302
|
}
|
|
301
303
|
|
|
@@ -306,12 +308,11 @@ function deleteNode(parentID, connectionKeys, pathToConnection, store, deleteIDs
|
|
|
306
308
|
try {
|
|
307
309
|
var _loop = function _loop() {
|
|
308
310
|
var key = _step3.value;
|
|
309
|
-
|
|
310
|
-
var connection = require("./RelayConnectionHandler").getConnection(recordProxy, key.key, key.filters);
|
|
311
|
+
var connection = RelayConnectionHandler.getConnection(recordProxy, key.key, key.filters);
|
|
311
312
|
|
|
312
313
|
if (connection) {
|
|
313
314
|
deleteIDs.forEach(function (deleteID) {
|
|
314
|
-
|
|
315
|
+
RelayConnectionHandler.deleteNode(connection, deleteID);
|
|
315
316
|
});
|
|
316
317
|
}
|
|
317
318
|
};
|
|
@@ -4,21 +4,22 @@
|
|
|
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.
|
|
6
6
|
*
|
|
7
|
-
*
|
|
7
|
+
*
|
|
8
8
|
* @format
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var RelayConnectionHandler = require("./RelayConnectionHandler");
|
|
13
|
+
|
|
14
|
+
var invariant = require("fbjs/lib/invariant");
|
|
15
|
+
|
|
12
16
|
function RelayDefaultHandlerProvider(handle) {
|
|
13
17
|
switch (handle) {
|
|
14
18
|
case 'connection':
|
|
15
|
-
return
|
|
16
|
-
|
|
17
|
-
case 'viewer':
|
|
18
|
-
return require("./RelayViewerHandler");
|
|
19
|
+
return RelayConnectionHandler;
|
|
19
20
|
}
|
|
20
21
|
|
|
21
|
-
!false ? process.env.NODE_ENV !== "production" ?
|
|
22
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayDefaultHandlerProvider: No handler provided for `%s`.', handle) : invariant(false) : void 0;
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
module.exports = RelayDefaultHandlerProvider;
|
|
@@ -0,0 +1,26 @@
|
|
|
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
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
var _require = require("./RelayStoreUtils"),
|
|
13
|
+
ROOT_TYPE = _require.ROOT_TYPE;
|
|
14
|
+
|
|
15
|
+
var _require2 = require("./RelayViewerHandler"),
|
|
16
|
+
VIEWER_ID = _require2.VIEWER_ID;
|
|
17
|
+
|
|
18
|
+
var missingViewerFieldHandler = {
|
|
19
|
+
kind: 'linked',
|
|
20
|
+
handle: function handle(field, record, argValues) {
|
|
21
|
+
if (record != null && record.__typename === ROOT_TYPE && field.name === 'viewer') {
|
|
22
|
+
return VIEWER_ID;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
module.exports = [missingViewerFieldHandler];
|
package/lib/RelayError.js
CHANGED
|
@@ -9,13 +9,18 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
13
13
|
|
|
14
|
+
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
15
|
+
|
|
16
|
+
var sprintf = require("fbjs/lib/sprintf");
|
|
14
17
|
/**
|
|
15
18
|
* @internal
|
|
16
19
|
*
|
|
17
20
|
* Factory methods for constructing errors in Relay.
|
|
18
21
|
*/
|
|
22
|
+
|
|
23
|
+
|
|
19
24
|
var RelayError = {
|
|
20
25
|
create: function create(name, format) {
|
|
21
26
|
for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
|
|
@@ -37,7 +42,7 @@ var RelayError = {
|
|
|
37
42
|
*/
|
|
38
43
|
|
|
39
44
|
function createError(type, name, format, args) {
|
|
40
|
-
var error = new Error(
|
|
45
|
+
var error = new Error(sprintf.apply(void 0, [format].concat((0, _toConsumableArray2["default"])(args))));
|
|
41
46
|
error.name = name;
|
|
42
47
|
error.type = type;
|
|
43
48
|
error.framesToPop = 2;
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
*
|
|
8
|
+
* @format
|
|
9
|
+
*/
|
|
10
|
+
'use strict';
|
|
11
|
+
|
|
12
|
+
var RelayFeatureFlags = {
|
|
13
|
+
// T45504512: new connection model
|
|
14
|
+
ENABLE_VARIABLE_CONNECTION_KEY: false
|
|
15
|
+
};
|
|
16
|
+
module.exports = RelayFeatureFlags;
|
|
@@ -9,10 +9,16 @@
|
|
|
9
9
|
*/
|
|
10
10
|
'use strict';
|
|
11
11
|
|
|
12
|
+
var RelayRecordState = require("./RelayRecordState");
|
|
13
|
+
|
|
14
|
+
var EXISTENT = RelayRecordState.EXISTENT,
|
|
15
|
+
NONEXISTENT = RelayRecordState.NONEXISTENT,
|
|
16
|
+
UNKNOWN = RelayRecordState.UNKNOWN;
|
|
12
17
|
/**
|
|
13
18
|
* An implementation of the `MutableRecordSource` interface (defined in
|
|
14
19
|
* `RelayStoreTypes`) that holds all records in memory.
|
|
15
20
|
*/
|
|
21
|
+
|
|
16
22
|
var RelayInMemoryRecordSource =
|
|
17
23
|
/*#__PURE__*/
|
|
18
24
|
function () {
|
|
@@ -40,10 +46,10 @@ function () {
|
|
|
40
46
|
|
|
41
47
|
_proto.getStatus = function getStatus(dataID) {
|
|
42
48
|
if (!this._records.hasOwnProperty(dataID)) {
|
|
43
|
-
return
|
|
49
|
+
return UNKNOWN;
|
|
44
50
|
}
|
|
45
51
|
|
|
46
|
-
return this._records[dataID] == null ?
|
|
52
|
+
return this._records[dataID] == null ? NONEXISTENT : EXISTENT;
|
|
47
53
|
};
|
|
48
54
|
|
|
49
55
|
_proto.has = function has(dataID) {
|