relay-runtime 9.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/handlers/RelayDefaultHandlerProvider.js.flow +47 -0
- package/handlers/connection/ConnectionHandler.js.flow +549 -0
- package/handlers/connection/ConnectionInterface.js.flow +92 -0
- package/handlers/connection/MutationHandlers.js.flow +199 -0
- package/index.js +1 -1
- package/index.js.flow +335 -0
- package/lib/handlers/RelayDefaultHandlerProvider.js +20 -0
- package/lib/handlers/connection/ConnectionHandler.js +1 -3
- package/lib/handlers/connection/MutationHandlers.js +212 -0
- package/lib/index.js +14 -2
- package/lib/mutations/RelayDeclarativeMutationConfig.js +22 -45
- package/lib/mutations/RelayRecordProxy.js +1 -3
- package/lib/mutations/RelayRecordSourceMutator.js +1 -3
- package/lib/mutations/RelayRecordSourceProxy.js +1 -3
- package/lib/mutations/RelayRecordSourceSelectorProxy.js +1 -3
- package/lib/mutations/commitMutation.js +2 -3
- package/lib/mutations/validateMutation.js +40 -9
- package/lib/network/RelayObservable.js +9 -9
- package/lib/network/RelayQueryResponseCache.js +8 -6
- package/lib/query/GraphQLTag.js +2 -1
- package/lib/query/PreloadableQueryRegistry.js +70 -0
- package/lib/query/fetchQuery.js +2 -3
- package/lib/query/fetchQueryInternal.js +5 -14
- package/lib/store/DataChecker.js +200 -71
- package/lib/store/RelayConcreteVariables.js +6 -2
- package/lib/store/RelayModernEnvironment.js +124 -65
- package/lib/store/RelayModernFragmentSpecResolver.js +19 -14
- package/lib/store/RelayModernOperationDescriptor.js +6 -5
- package/lib/store/RelayModernQueryExecutor.js +122 -73
- package/lib/store/RelayModernRecord.js +14 -9
- package/lib/store/RelayModernSelector.js +6 -2
- package/lib/store/RelayModernStore.js +281 -131
- package/lib/store/RelayOperationTracker.js +35 -78
- package/lib/store/RelayOptimisticRecordSource.js +7 -5
- package/lib/store/RelayPublishQueue.js +2 -4
- package/lib/store/RelayReader.js +304 -52
- package/lib/store/RelayRecordSource.js +1 -3
- package/lib/store/RelayRecordSourceMapImpl.js +13 -18
- package/lib/store/RelayReferenceMarker.js +125 -14
- package/lib/store/RelayResponseNormalizer.js +261 -66
- package/lib/store/RelayStoreReactFlightUtils.js +47 -0
- 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/defaultRequiredFieldLogger.js +18 -0
- package/lib/store/normalizeRelayPayload.js +6 -2
- package/lib/store/readInlineData.js +1 -1
- package/lib/subscription/requestSubscription.js +4 -3
- package/lib/util/NormalizationNode.js +1 -5
- package/lib/util/RelayConcreteNode.js +11 -6
- package/lib/util/RelayError.js +39 -9
- package/lib/util/RelayFeatureFlags.js +6 -3
- package/lib/util/RelayReplaySubject.js +3 -3
- package/lib/util/createPayloadFor3DField.js +7 -2
- package/lib/util/getFragmentIdentifier.js +12 -3
- package/lib/util/getOperation.js +33 -0
- package/lib/util/getRequestIdentifier.js +2 -2
- package/lib/util/isEmptyObject.js +25 -0
- package/lib/util/recycleNodesInto.js +6 -7
- package/lib/util/reportMissingRequiredFields.js +48 -0
- package/mutations/RelayDeclarativeMutationConfig.js.flow +380 -0
- package/mutations/RelayRecordProxy.js.flow +165 -0
- package/mutations/RelayRecordSourceMutator.js.flow +238 -0
- package/mutations/RelayRecordSourceProxy.js.flow +164 -0
- package/mutations/RelayRecordSourceSelectorProxy.js.flow +119 -0
- package/mutations/applyOptimisticMutation.js.flow +76 -0
- package/mutations/commitLocalUpdate.js.flow +24 -0
- package/mutations/commitMutation.js.flow +181 -0
- package/mutations/validateMutation.js.flow +242 -0
- package/network/ConvertToExecuteFunction.js.flow +49 -0
- package/network/RelayNetwork.js.flow +84 -0
- package/network/RelayNetworkTypes.js.flow +145 -0
- package/network/RelayObservable.js.flow +634 -0
- package/network/RelayQueryResponseCache.js.flow +111 -0
- package/package.json +2 -2
- package/query/GraphQLTag.js.flow +168 -0
- package/query/PreloadableQueryRegistry.js.flow +65 -0
- package/query/fetchQuery.js.flow +47 -0
- package/query/fetchQueryInternal.js.flow +343 -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 +568 -0
- package/store/RelayConcreteVariables.js.flow +96 -0
- package/store/RelayModernEnvironment.js.flow +571 -0
- package/store/RelayModernFragmentSpecResolver.js.flow +438 -0
- package/store/RelayModernOperationDescriptor.js.flow +92 -0
- package/store/RelayModernQueryExecutor.js.flow +1345 -0
- package/store/RelayModernRecord.js.flow +403 -0
- package/store/RelayModernSelector.js.flow +455 -0
- package/store/RelayModernStore.js.flow +858 -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 +638 -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 +324 -0
- package/store/RelayResponseNormalizer.js.flow +791 -0
- package/store/RelayStoreReactFlightUtils.js.flow +64 -0
- package/store/RelayStoreTypes.js.flow +958 -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/defaultRequiredFieldLogger.js.flow +23 -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 +103 -0
- package/util/JSResourceTypes.flow.js.flow +20 -0
- package/util/NormalizationNode.js.flow +213 -0
- package/util/ReaderNode.js.flow +227 -0
- package/util/RelayConcreteNode.js.flow +99 -0
- package/util/RelayDefaultHandleKey.js.flow +17 -0
- package/util/RelayError.js.flow +62 -0
- package/util/RelayFeatureFlags.js.flow +37 -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 +76 -0
- package/util/getOperation.js.flow +40 -0
- package/util/getRelayHandleKey.js.flow +41 -0
- package/util/getRequestIdentifier.js.flow +42 -0
- package/util/isEmptyObject.js.flow +25 -0
- package/util/isPromise.js.flow +21 -0
- package/util/isScalarAndEqual.js.flow +26 -0
- package/util/recycleNodesInto.js.flow +87 -0
- package/util/reportMissingRequiredFields.js.flow +51 -0
- package/util/resolveImmediate.js.flow +30 -0
- package/util/stableCopy.js.flow +35 -0
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
20
|
|
|
17
21
|
var invariant = require("fbjs/lib/invariant");
|
|
18
22
|
|
|
@@ -23,9 +27,7 @@ var stableCopy = require('../util/stableCopy');
|
|
|
23
27
|
* - `get` with TTL
|
|
24
28
|
* - cache size limiting, with least-recently *updated* entries purged first
|
|
25
29
|
*/
|
|
26
|
-
var RelayQueryResponseCache =
|
|
27
|
-
/*#__PURE__*/
|
|
28
|
-
function () {
|
|
30
|
+
var RelayQueryResponseCache = /*#__PURE__*/function () {
|
|
29
31
|
function RelayQueryResponseCache(_ref) {
|
|
30
32
|
var size = _ref.size,
|
|
31
33
|
ttl = _ref.ttl;
|
|
@@ -55,8 +57,8 @@ function () {
|
|
|
55
57
|
|
|
56
58
|
var response = this._responses.get(cacheKey);
|
|
57
59
|
|
|
58
|
-
return response != null ? (
|
|
59
|
-
extensions: (
|
|
60
|
+
return response != null ? _objectSpread(_objectSpread({}, response.payload), {}, {
|
|
61
|
+
extensions: _objectSpread(_objectSpread({}, response.payload.extensions), {}, {
|
|
60
62
|
cacheTimestamp: response.fetchTime
|
|
61
63
|
})
|
|
62
64
|
}) : null;
|
package/lib/query/GraphQLTag.js
CHANGED
|
@@ -21,7 +21,7 @@ var warning = require("fbjs/lib/warning");
|
|
|
21
21
|
* All calls to this function should be transformed by the plugin.
|
|
22
22
|
*/
|
|
23
23
|
function graphql(strings) {
|
|
24
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'graphql: Unexpected invocation at runtime. Either the Babel transform ' + 'was not set up, or it failed to identify this call site. Make sure it ' + 'is being used verbatim as `graphql`.') : invariant(false) : void 0;
|
|
24
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'graphql: Unexpected invocation at runtime. Either the Babel transform ' + 'was not set up, or it failed to identify this call site. Make sure it ' + 'is being used verbatim as `graphql`. Note also that there cannot be ' + 'a space between graphql and the backtick that follows.') : invariant(false) : void 0;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
function getNode(taggedNode) {
|
|
@@ -100,6 +100,7 @@ function getInlineDataFragment(taggedNode) {
|
|
|
100
100
|
|
|
101
101
|
module.exports = {
|
|
102
102
|
getFragment: getFragment,
|
|
103
|
+
getNode: getNode,
|
|
103
104
|
getPaginationFragment: getPaginationFragment,
|
|
104
105
|
getRefetchableFragment: getRefetchableFragment,
|
|
105
106
|
getRequest: getRequest,
|
|
@@ -0,0 +1,70 @@
|
|
|
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 PreloadableQueryRegistry = /*#__PURE__*/function () {
|
|
14
|
+
function PreloadableQueryRegistry() {
|
|
15
|
+
this._preloadableQueries = new Map();
|
|
16
|
+
this._callbacks = new Map();
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
var _proto = PreloadableQueryRegistry.prototype;
|
|
20
|
+
|
|
21
|
+
_proto.set = function set(key, value) {
|
|
22
|
+
this._preloadableQueries.set(key, value);
|
|
23
|
+
|
|
24
|
+
var callbacks = this._callbacks.get(key);
|
|
25
|
+
|
|
26
|
+
if (callbacks != null) {
|
|
27
|
+
callbacks.forEach(function (cb) {
|
|
28
|
+
try {
|
|
29
|
+
cb(value);
|
|
30
|
+
} catch (e) {
|
|
31
|
+
// We do *not* want to throw in this tick, as this callback is executed
|
|
32
|
+
// while a query is required for the very first time.
|
|
33
|
+
setTimeout(function () {
|
|
34
|
+
throw e;
|
|
35
|
+
}, 0);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
_proto.get = function get(key) {
|
|
42
|
+
return this._preloadableQueries.get(key);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
_proto.onLoad = function onLoad(key, callback) {
|
|
46
|
+
var _this$_callbacks$get;
|
|
47
|
+
|
|
48
|
+
var callbacks = (_this$_callbacks$get = this._callbacks.get(key)) !== null && _this$_callbacks$get !== void 0 ? _this$_callbacks$get : new Set();
|
|
49
|
+
callbacks.add(callback);
|
|
50
|
+
|
|
51
|
+
var dispose = function dispose() {
|
|
52
|
+
callbacks["delete"](callback);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
this._callbacks.set(key, callbacks);
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
dispose: dispose
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
_proto.clear = function clear() {
|
|
63
|
+
this._preloadableQueries.clear();
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
return PreloadableQueryRegistry;
|
|
67
|
+
}();
|
|
68
|
+
|
|
69
|
+
var preloadableQueryRegistry = new PreloadableQueryRegistry();
|
|
70
|
+
module.exports = preloadableQueryRegistry;
|
package/lib/query/fetchQuery.js
CHANGED
|
@@ -28,10 +28,9 @@ function fetchQuery(environment, taggedNode, variables, cacheConfig) {
|
|
|
28
28
|
throw new Error('fetchQuery: Expected query operation');
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
var operation = createOperationDescriptor(query, variables);
|
|
31
|
+
var operation = createOperationDescriptor(query, variables, cacheConfig);
|
|
32
32
|
return environment.execute({
|
|
33
|
-
operation: operation
|
|
34
|
-
cacheConfig: cacheConfig
|
|
33
|
+
operation: operation
|
|
35
34
|
}).map(function () {
|
|
36
35
|
return environment.lookup(operation.fragment).data;
|
|
37
36
|
}).toPromise();
|
|
@@ -82,11 +82,10 @@ var requestCachesByEnvironment = WEAKMAP_SUPPORTED ? new WeakMap() : new Map();
|
|
|
82
82
|
* ```
|
|
83
83
|
*/
|
|
84
84
|
|
|
85
|
-
function fetchQuery(environment, operation
|
|
86
|
-
return fetchQueryDeduped(environment, operation.request, function () {
|
|
85
|
+
function fetchQuery(environment, operation) {
|
|
86
|
+
return fetchQueryDeduped(environment, operation.request.identifier, function () {
|
|
87
87
|
return environment.execute({
|
|
88
|
-
operation: operation
|
|
89
|
-
cacheConfig: options === null || options === void 0 ? void 0 : options.networkCacheConfig
|
|
88
|
+
operation: operation
|
|
90
89
|
});
|
|
91
90
|
});
|
|
92
91
|
}
|
|
@@ -99,10 +98,9 @@ function fetchQuery(environment, operation, options) {
|
|
|
99
98
|
*/
|
|
100
99
|
|
|
101
100
|
|
|
102
|
-
function fetchQueryDeduped(environment,
|
|
101
|
+
function fetchQueryDeduped(environment, identifier, fetchFn) {
|
|
103
102
|
return Observable.create(function (sink) {
|
|
104
103
|
var requestCache = getRequestCache(environment);
|
|
105
|
-
var identifier = request.identifier;
|
|
106
104
|
var cachedRequest = requestCache.get(identifier);
|
|
107
105
|
|
|
108
106
|
if (!cachedRequest) {
|
|
@@ -256,12 +254,6 @@ function getObservableForActiveRequest(environment, request) {
|
|
|
256
254
|
|
|
257
255
|
return getActiveStatusObservableForCachedRequest(environment, requestCache, cachedRequest);
|
|
258
256
|
}
|
|
259
|
-
|
|
260
|
-
function isRequestActive(environment, request) {
|
|
261
|
-
var requestCache = getRequestCache(environment);
|
|
262
|
-
var cachedRequest = requestCache.get(request.identifier);
|
|
263
|
-
return cachedRequest != null && environment.isRequestActive(cachedRequest.identifier);
|
|
264
|
-
}
|
|
265
257
|
/**
|
|
266
258
|
* @private
|
|
267
259
|
*/
|
|
@@ -293,6 +285,5 @@ module.exports = {
|
|
|
293
285
|
fetchQuery: fetchQuery,
|
|
294
286
|
fetchQueryDeduped: fetchQueryDeduped,
|
|
295
287
|
getPromiseForActiveRequest: getPromiseForActiveRequest,
|
|
296
|
-
getObservableForActiveRequest: getObservableForActiveRequest
|
|
297
|
-
isRequestActive: isRequestActive
|
|
288
|
+
getObservableForActiveRequest: getObservableForActiveRequest
|
|
298
289
|
};
|
package/lib/store/DataChecker.js
CHANGED
|
@@ -11,18 +11,32 @@
|
|
|
11
11
|
// flowlint ambiguous-object-type:error
|
|
12
12
|
'use strict';
|
|
13
13
|
|
|
14
|
+
function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
|
|
15
|
+
|
|
16
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
17
|
+
|
|
18
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
19
|
+
|
|
14
20
|
var RelayConcreteNode = require('../util/RelayConcreteNode');
|
|
15
21
|
|
|
22
|
+
var RelayFeatureFlags = require('../util/RelayFeatureFlags');
|
|
23
|
+
|
|
16
24
|
var RelayModernRecord = require('./RelayModernRecord');
|
|
17
25
|
|
|
18
26
|
var RelayRecordSourceMutator = require('../mutations/RelayRecordSourceMutator');
|
|
19
27
|
|
|
20
28
|
var RelayRecordSourceProxy = require('../mutations/RelayRecordSourceProxy');
|
|
21
29
|
|
|
30
|
+
var RelayStoreReactFlightUtils = require('./RelayStoreReactFlightUtils');
|
|
31
|
+
|
|
22
32
|
var RelayStoreUtils = require('./RelayStoreUtils');
|
|
23
33
|
|
|
24
34
|
var cloneRelayHandleSourceField = require('./cloneRelayHandleSourceField');
|
|
25
35
|
|
|
36
|
+
var cloneRelayScalarHandleSourceField = require('./cloneRelayScalarHandleSourceField');
|
|
37
|
+
|
|
38
|
+
var getOperation = require('../util/getOperation');
|
|
39
|
+
|
|
26
40
|
var invariant = require("fbjs/lib/invariant");
|
|
27
41
|
|
|
28
42
|
var _require = require('./ClientID'),
|
|
@@ -32,9 +46,13 @@ var _require2 = require('./RelayRecordState'),
|
|
|
32
46
|
EXISTENT = _require2.EXISTENT,
|
|
33
47
|
UNKNOWN = _require2.UNKNOWN;
|
|
34
48
|
|
|
49
|
+
var _require3 = require('./TypeID'),
|
|
50
|
+
generateTypeID = _require3.generateTypeID;
|
|
51
|
+
|
|
35
52
|
var CONDITION = RelayConcreteNode.CONDITION,
|
|
36
53
|
CLIENT_EXTENSION = RelayConcreteNode.CLIENT_EXTENSION,
|
|
37
54
|
DEFER = RelayConcreteNode.DEFER,
|
|
55
|
+
FLIGHT_FIELD = RelayConcreteNode.FLIGHT_FIELD,
|
|
38
56
|
FRAGMENT_SPREAD = RelayConcreteNode.FRAGMENT_SPREAD,
|
|
39
57
|
INLINE_FRAGMENT = RelayConcreteNode.INLINE_FRAGMENT,
|
|
40
58
|
LINKED_FIELD = RelayConcreteNode.LINKED_FIELD,
|
|
@@ -42,8 +60,10 @@ var CONDITION = RelayConcreteNode.CONDITION,
|
|
|
42
60
|
MODULE_IMPORT = RelayConcreteNode.MODULE_IMPORT,
|
|
43
61
|
SCALAR_FIELD = RelayConcreteNode.SCALAR_FIELD,
|
|
44
62
|
SCALAR_HANDLE = RelayConcreteNode.SCALAR_HANDLE,
|
|
45
|
-
STREAM = RelayConcreteNode.STREAM
|
|
46
|
-
|
|
63
|
+
STREAM = RelayConcreteNode.STREAM,
|
|
64
|
+
TYPE_DISCRIMINATOR = RelayConcreteNode.TYPE_DISCRIMINATOR;
|
|
65
|
+
var ROOT_ID = RelayStoreUtils.ROOT_ID,
|
|
66
|
+
getModuleOperationKey = RelayStoreUtils.getModuleOperationKey,
|
|
47
67
|
getStorageKey = RelayStoreUtils.getStorageKey,
|
|
48
68
|
getArgumentValues = RelayStoreUtils.getArgumentValues;
|
|
49
69
|
/**
|
|
@@ -69,17 +89,13 @@ function check(source, target, selector, handlers, operationLoader, getDataID) {
|
|
|
69
89
|
*/
|
|
70
90
|
|
|
71
91
|
|
|
72
|
-
var DataChecker =
|
|
73
|
-
/*#__PURE__*/
|
|
74
|
-
function () {
|
|
92
|
+
var DataChecker = /*#__PURE__*/function () {
|
|
75
93
|
function DataChecker(source, target, variables, handlers, operationLoader, getDataID) {
|
|
76
|
-
var _operationLoader;
|
|
77
|
-
|
|
78
94
|
var mutator = new RelayRecordSourceMutator(source, target);
|
|
79
95
|
this._mostRecentlyInvalidatedAt = null;
|
|
80
96
|
this._handlers = handlers;
|
|
81
97
|
this._mutator = mutator;
|
|
82
|
-
this._operationLoader =
|
|
98
|
+
this._operationLoader = operationLoader !== null && operationLoader !== void 0 ? operationLoader : null;
|
|
83
99
|
this._recordSourceProxy = new RelayRecordSourceProxy(mutator, getDataID);
|
|
84
100
|
this._recordWasMissing = false;
|
|
85
101
|
this._source = source;
|
|
@@ -131,12 +147,11 @@ function () {
|
|
|
131
147
|
args = _this$_getDataForHand.args,
|
|
132
148
|
record = _this$_getDataForHand.record;
|
|
133
149
|
|
|
134
|
-
var
|
|
135
|
-
|
|
136
|
-
var _iteratorError = undefined;
|
|
150
|
+
var _iterator = _createForOfIteratorHelper(this._handlers),
|
|
151
|
+
_step;
|
|
137
152
|
|
|
138
153
|
try {
|
|
139
|
-
for (
|
|
154
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
140
155
|
var handler = _step.value;
|
|
141
156
|
|
|
142
157
|
if (handler.kind === 'scalar') {
|
|
@@ -148,18 +163,9 @@ function () {
|
|
|
148
163
|
}
|
|
149
164
|
}
|
|
150
165
|
} catch (err) {
|
|
151
|
-
|
|
152
|
-
_iteratorError = err;
|
|
166
|
+
_iterator.e(err);
|
|
153
167
|
} finally {
|
|
154
|
-
|
|
155
|
-
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
|
|
156
|
-
_iterator["return"]();
|
|
157
|
-
}
|
|
158
|
-
} finally {
|
|
159
|
-
if (_didIteratorError) {
|
|
160
|
-
throw _iteratorError;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
168
|
+
_iterator.f();
|
|
163
169
|
}
|
|
164
170
|
|
|
165
171
|
this._handleMissing();
|
|
@@ -170,35 +176,25 @@ function () {
|
|
|
170
176
|
args = _this$_getDataForHand2.args,
|
|
171
177
|
record = _this$_getDataForHand2.record;
|
|
172
178
|
|
|
173
|
-
var
|
|
174
|
-
|
|
175
|
-
var _iteratorError2 = undefined;
|
|
179
|
+
var _iterator2 = _createForOfIteratorHelper(this._handlers),
|
|
180
|
+
_step2;
|
|
176
181
|
|
|
177
182
|
try {
|
|
178
|
-
for (
|
|
183
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
179
184
|
var handler = _step2.value;
|
|
180
185
|
|
|
181
186
|
if (handler.kind === 'linked') {
|
|
182
187
|
var newValue = handler.handle(field, record, args, this._recordSourceProxy);
|
|
183
188
|
|
|
184
|
-
if (newValue
|
|
189
|
+
if (newValue !== undefined && (newValue === null || this._mutator.getStatus(newValue) === EXISTENT)) {
|
|
185
190
|
return newValue;
|
|
186
191
|
}
|
|
187
192
|
}
|
|
188
193
|
}
|
|
189
194
|
} catch (err) {
|
|
190
|
-
|
|
191
|
-
_iteratorError2 = err;
|
|
195
|
+
_iterator2.e(err);
|
|
192
196
|
} finally {
|
|
193
|
-
|
|
194
|
-
if (!_iteratorNormalCompletion2 && _iterator2["return"] != null) {
|
|
195
|
-
_iterator2["return"]();
|
|
196
|
-
}
|
|
197
|
-
} finally {
|
|
198
|
-
if (_didIteratorError2) {
|
|
199
|
-
throw _iteratorError2;
|
|
200
|
-
}
|
|
201
|
-
}
|
|
197
|
+
_iterator2.f();
|
|
202
198
|
}
|
|
203
199
|
|
|
204
200
|
this._handleMissing();
|
|
@@ -211,12 +207,11 @@ function () {
|
|
|
211
207
|
args = _this$_getDataForHand3.args,
|
|
212
208
|
record = _this$_getDataForHand3.record;
|
|
213
209
|
|
|
214
|
-
var
|
|
215
|
-
|
|
216
|
-
var _iteratorError3 = undefined;
|
|
210
|
+
var _iterator3 = _createForOfIteratorHelper(this._handlers),
|
|
211
|
+
_step3;
|
|
217
212
|
|
|
218
213
|
try {
|
|
219
|
-
for (
|
|
214
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
220
215
|
var handler = _step3.value;
|
|
221
216
|
|
|
222
217
|
if (handler.kind === 'pluralLinked') {
|
|
@@ -230,22 +225,15 @@ function () {
|
|
|
230
225
|
if (allItemsKnown) {
|
|
231
226
|
return newValue;
|
|
232
227
|
}
|
|
228
|
+
} else if (newValue === null) {
|
|
229
|
+
return null;
|
|
233
230
|
}
|
|
234
231
|
}
|
|
235
232
|
}
|
|
236
233
|
} catch (err) {
|
|
237
|
-
|
|
238
|
-
_iteratorError3 = err;
|
|
234
|
+
_iterator3.e(err);
|
|
239
235
|
} finally {
|
|
240
|
-
|
|
241
|
-
if (!_iteratorNormalCompletion3 && _iterator3["return"] != null) {
|
|
242
|
-
_iterator3["return"]();
|
|
243
|
-
}
|
|
244
|
-
} finally {
|
|
245
|
-
if (_didIteratorError3) {
|
|
246
|
-
throw _iteratorError3;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
236
|
+
_iterator3.f();
|
|
249
237
|
}
|
|
250
238
|
|
|
251
239
|
this._handleMissing();
|
|
@@ -300,26 +288,71 @@ function () {
|
|
|
300
288
|
break;
|
|
301
289
|
|
|
302
290
|
case INLINE_FRAGMENT:
|
|
303
|
-
|
|
291
|
+
{
|
|
292
|
+
var abstractKey = selection.abstractKey;
|
|
293
|
+
|
|
294
|
+
if (abstractKey == null) {
|
|
295
|
+
// concrete type refinement: only check data if the type exactly matches
|
|
296
|
+
var typeName = _this2._mutator.getType(dataID);
|
|
297
|
+
|
|
298
|
+
if (typeName === selection.type) {
|
|
299
|
+
_this2._traverseSelections(selection.selections, dataID);
|
|
300
|
+
}
|
|
301
|
+
} else if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
|
|
302
|
+
// Abstract refinement: check data depending on whether the type
|
|
303
|
+
// conforms to the interface/union or not:
|
|
304
|
+
// - Type known to _not_ implement the interface: don't check the selections.
|
|
305
|
+
// - Type is known _to_ implement the interface: check selections.
|
|
306
|
+
// - Unknown whether the type implements the interface: don't check the selections
|
|
307
|
+
// and treat the data as missing; we do this because the Relay Compiler
|
|
308
|
+
// guarantees that the type discriminator will always be fetched.
|
|
309
|
+
var recordType = _this2._mutator.getType(dataID);
|
|
310
|
+
|
|
311
|
+
!(recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
|
|
312
|
+
var typeID = generateTypeID(recordType);
|
|
313
|
+
|
|
314
|
+
var implementsInterface = _this2._mutator.getValue(typeID, abstractKey);
|
|
315
|
+
|
|
316
|
+
if (implementsInterface === true) {
|
|
317
|
+
_this2._traverseSelections(selection.selections, dataID);
|
|
318
|
+
} else if (implementsInterface == null) {
|
|
319
|
+
// unsure if the type implements the interface: data is
|
|
320
|
+
// missing so don't bother reading the fragment
|
|
321
|
+
_this2._handleMissing();
|
|
322
|
+
} // else false: known to not implement the interface
|
|
323
|
+
|
|
324
|
+
} else {
|
|
325
|
+
// legacy behavior for abstract refinements: always check even
|
|
326
|
+
// if the type doesn't conform
|
|
327
|
+
_this2._traverseSelections(selection.selections, dataID);
|
|
328
|
+
}
|
|
304
329
|
|
|
305
|
-
|
|
306
|
-
_this2._traverseSelections(selection.selections, dataID);
|
|
330
|
+
break;
|
|
307
331
|
}
|
|
308
332
|
|
|
309
|
-
break;
|
|
310
|
-
|
|
311
333
|
case LINKED_HANDLE:
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
334
|
+
{
|
|
335
|
+
// Handles have no selections themselves; traverse the original field
|
|
336
|
+
// where the handle was set-up instead.
|
|
337
|
+
var handleField = cloneRelayHandleSourceField(selection, selections, _this2._variables);
|
|
338
|
+
|
|
339
|
+
if (handleField.plural) {
|
|
340
|
+
_this2._checkPluralLink(handleField, dataID);
|
|
341
|
+
} else {
|
|
342
|
+
_this2._checkLink(handleField, dataID);
|
|
343
|
+
}
|
|
315
344
|
|
|
316
|
-
|
|
317
|
-
_this2._checkPluralLink(handleField, dataID);
|
|
318
|
-
} else {
|
|
319
|
-
_this2._checkLink(handleField, dataID);
|
|
345
|
+
break;
|
|
320
346
|
}
|
|
321
347
|
|
|
322
|
-
|
|
348
|
+
case SCALAR_HANDLE:
|
|
349
|
+
{
|
|
350
|
+
var _handleField = cloneRelayScalarHandleSourceField(selection, selections, _this2._variables);
|
|
351
|
+
|
|
352
|
+
_this2._checkScalar(_handleField, dataID);
|
|
353
|
+
|
|
354
|
+
break;
|
|
355
|
+
}
|
|
323
356
|
|
|
324
357
|
case MODULE_IMPORT:
|
|
325
358
|
_this2._checkModuleImport(selection, dataID);
|
|
@@ -331,10 +364,10 @@ function () {
|
|
|
331
364
|
_this2._traverseSelections(selection.selections, dataID);
|
|
332
365
|
|
|
333
366
|
break;
|
|
367
|
+
// $FlowFixMe[incompatible-type]
|
|
334
368
|
|
|
335
|
-
case SCALAR_HANDLE:
|
|
336
369
|
case FRAGMENT_SPREAD:
|
|
337
|
-
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayAsyncLoader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0; // $FlowExpectedError - we need the break; for OSS linter
|
|
370
|
+
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayAsyncLoader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0; // $FlowExpectedError[unreachable-code] - we need the break; for OSS linter
|
|
338
371
|
|
|
339
372
|
break;
|
|
340
373
|
|
|
@@ -346,6 +379,37 @@ function () {
|
|
|
346
379
|
_this2._recordWasMissing = recordWasMissing;
|
|
347
380
|
break;
|
|
348
381
|
|
|
382
|
+
case TYPE_DISCRIMINATOR:
|
|
383
|
+
if (RelayFeatureFlags.ENABLE_PRECISE_TYPE_REFINEMENT) {
|
|
384
|
+
var _abstractKey = selection.abstractKey;
|
|
385
|
+
|
|
386
|
+
var _recordType = _this2._mutator.getType(dataID);
|
|
387
|
+
|
|
388
|
+
!(_recordType != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected record `%s` to have a known type', dataID) : invariant(false) : void 0;
|
|
389
|
+
|
|
390
|
+
var _typeID = generateTypeID(_recordType);
|
|
391
|
+
|
|
392
|
+
var _implementsInterface = _this2._mutator.getValue(_typeID, _abstractKey);
|
|
393
|
+
|
|
394
|
+
if (_implementsInterface == null) {
|
|
395
|
+
// unsure if the type implements the interface: data is
|
|
396
|
+
// missing
|
|
397
|
+
_this2._handleMissing();
|
|
398
|
+
} // else: if it does or doesn't implement, we don't need to check or skip anything else
|
|
399
|
+
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
break;
|
|
403
|
+
|
|
404
|
+
case FLIGHT_FIELD:
|
|
405
|
+
if (RelayFeatureFlags.ENABLE_REACT_FLIGHT_COMPONENT_FIELD) {
|
|
406
|
+
_this2._checkFlightField(selection, dataID);
|
|
407
|
+
} else {
|
|
408
|
+
throw new Error('Flight fields are not yet supported.');
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
break;
|
|
412
|
+
|
|
349
413
|
default:
|
|
350
414
|
selection;
|
|
351
415
|
!false ? process.env.NODE_ENV !== "production" ? invariant(false, 'RelayAsyncLoader(): Unexpected ast kind `%s`.', selection.kind) : invariant(false) : void 0;
|
|
@@ -368,9 +432,11 @@ function () {
|
|
|
368
432
|
return;
|
|
369
433
|
}
|
|
370
434
|
|
|
371
|
-
var
|
|
435
|
+
var normalizationRootNode = operationLoader.get(operationReference);
|
|
436
|
+
|
|
437
|
+
if (normalizationRootNode != null) {
|
|
438
|
+
var operation = getOperation(normalizationRootNode);
|
|
372
439
|
|
|
373
|
-
if (operation != null) {
|
|
374
440
|
this._traverse(operation, dataID);
|
|
375
441
|
} else {
|
|
376
442
|
// If the fragment is not available, we assume that the data cannot have been
|
|
@@ -403,6 +469,8 @@ function () {
|
|
|
403
469
|
|
|
404
470
|
if (linkedID != null) {
|
|
405
471
|
this._mutator.setLinkedRecordID(dataID, storageKey, linkedID);
|
|
472
|
+
} else if (linkedID === null) {
|
|
473
|
+
this._mutator.setValue(dataID, storageKey, null);
|
|
406
474
|
}
|
|
407
475
|
}
|
|
408
476
|
|
|
@@ -423,6 +491,8 @@ function () {
|
|
|
423
491
|
|
|
424
492
|
if (linkedIDs != null) {
|
|
425
493
|
this._mutator.setLinkedRecordIDs(dataID, storageKey, linkedIDs);
|
|
494
|
+
} else if (linkedIDs === null) {
|
|
495
|
+
this._mutator.setValue(dataID, storageKey, null);
|
|
426
496
|
}
|
|
427
497
|
}
|
|
428
498
|
|
|
@@ -435,6 +505,65 @@ function () {
|
|
|
435
505
|
}
|
|
436
506
|
};
|
|
437
507
|
|
|
508
|
+
_proto._checkFlightField = function _checkFlightField(field, dataID) {
|
|
509
|
+
var storageKey = getStorageKey(field, this._variables);
|
|
510
|
+
|
|
511
|
+
var linkedID = this._mutator.getLinkedRecordID(dataID, storageKey);
|
|
512
|
+
|
|
513
|
+
if (linkedID == null) {
|
|
514
|
+
if (linkedID === undefined) {
|
|
515
|
+
this._handleMissing();
|
|
516
|
+
|
|
517
|
+
return;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
var tree = this._mutator.getValue(linkedID, RelayStoreReactFlightUtils.REACT_FLIGHT_TREE_STORAGE_KEY);
|
|
524
|
+
|
|
525
|
+
var reachableQueries = this._mutator.getValue(linkedID, RelayStoreReactFlightUtils.REACT_FLIGHT_QUERIES_STORAGE_KEY);
|
|
526
|
+
|
|
527
|
+
if (tree == null || !Array.isArray(reachableQueries)) {
|
|
528
|
+
this._handleMissing();
|
|
529
|
+
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
var operationLoader = this._operationLoader;
|
|
534
|
+
!(operationLoader !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'DataChecker: Expected an operationLoader to be configured when using ' + 'React Flight.') : invariant(false) : void 0; // In Flight, the variables that are in scope for reachable queries aren't
|
|
535
|
+
// the same as what's in scope for the outer query.
|
|
536
|
+
|
|
537
|
+
var prevVariables = this._variables; // $FlowFixMe[incompatible-cast]
|
|
538
|
+
|
|
539
|
+
var _iterator4 = _createForOfIteratorHelper(reachableQueries),
|
|
540
|
+
_step4;
|
|
541
|
+
|
|
542
|
+
try {
|
|
543
|
+
for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
|
|
544
|
+
var query = _step4.value;
|
|
545
|
+
this._variables = query.variables;
|
|
546
|
+
var normalizationRootNode = operationLoader.get(query.module);
|
|
547
|
+
|
|
548
|
+
if (normalizationRootNode != null) {
|
|
549
|
+
var operation = getOperation(normalizationRootNode);
|
|
550
|
+
|
|
551
|
+
this._traverseSelections(operation.selections, ROOT_ID);
|
|
552
|
+
} else {
|
|
553
|
+
// If the fragment is not available, we assume that the data cannot have
|
|
554
|
+
// been processed yet and must therefore be missing.
|
|
555
|
+
this._handleMissing();
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
} catch (err) {
|
|
559
|
+
_iterator4.e(err);
|
|
560
|
+
} finally {
|
|
561
|
+
_iterator4.f();
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
this._variables = prevVariables;
|
|
565
|
+
};
|
|
566
|
+
|
|
438
567
|
return DataChecker;
|
|
439
568
|
}();
|
|
440
569
|
|
|
@@ -12,7 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
14
14
|
|
|
15
|
-
var
|
|
15
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
16
|
+
|
|
17
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
|
|
18
|
+
|
|
19
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
16
20
|
|
|
17
21
|
var invariant = require("fbjs/lib/invariant");
|
|
18
22
|
|
|
@@ -30,7 +34,7 @@ function getFragmentVariables(fragment, rootVariables, argumentVariables) {
|
|
|
30
34
|
return;
|
|
31
35
|
}
|
|
32
36
|
|
|
33
|
-
variables = variables || (
|
|
37
|
+
variables = variables || _objectSpread({}, argumentVariables);
|
|
34
38
|
|
|
35
39
|
switch (definition.kind) {
|
|
36
40
|
case 'LocalArgument':
|