relay-runtime 18.2.0 → 20.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/experimental.js +1 -1
- package/experimental.js.flow +8 -6
- package/index.js +1 -1
- package/index.js.flow +3 -0
- package/lib/experimental.js +5 -2
- package/lib/index.js +3 -0
- package/lib/multi-actor-environment/ActorSpecificEnvironment.js +1 -1
- package/lib/mutations/RelayRecordSourceProxy.js +2 -1
- package/lib/mutations/createUpdatableProxy.js +1 -1
- package/lib/mutations/validateMutation.js +2 -2
- package/lib/network/RelayObservable.js +1 -3
- package/lib/network/wrapNetworkWithLogObserver.js +2 -2
- package/lib/query/fetchQuery.js +1 -1
- package/lib/store/DataChecker.js +12 -8
- package/lib/store/OperationExecutor.js +93 -43
- package/lib/store/RelayModernEnvironment.js +13 -4
- package/lib/store/RelayModernFragmentSpecResolver.js +4 -4
- package/lib/store/RelayModernStore.js +49 -24
- package/lib/store/RelayPublishQueue.js +11 -15
- package/lib/store/RelayReader.js +134 -151
- package/lib/store/RelayReferenceMarker.js +14 -7
- package/lib/store/RelayResponseNormalizer.js +57 -31
- package/lib/store/RelayStoreSubscriptions.js +2 -2
- package/lib/store/RelayStoreUtils.js +8 -0
- package/lib/store/ResolverFragments.js +2 -2
- package/lib/store/createRelayLoggingContext.js +17 -0
- package/lib/store/generateTypenamePrefixedDataID.js +9 -0
- package/lib/store/live-resolvers/LiveResolverCache.js +4 -2
- package/lib/store/live-resolvers/resolverDataInjector.js +4 -4
- package/lib/store/normalizeResponse.js +2 -2
- package/lib/store/observeFragmentExperimental.js +60 -13
- package/lib/store/observeQueryExperimental.js +21 -0
- package/lib/util/RelayFeatureFlags.js +7 -1
- package/lib/util/handlePotentialSnapshotErrors.js +11 -8
- package/multi-actor-environment/ActorSpecificEnvironment.js.flow +1 -0
- package/mutations/RelayRecordSourceProxy.js.flow +4 -0
- package/mutations/createUpdatableProxy.js.flow +1 -1
- package/mutations/validateMutation.js.flow +3 -3
- package/network/RelayNetworkTypes.js.flow +3 -0
- package/network/RelayObservable.js.flow +1 -5
- package/network/wrapNetworkWithLogObserver.js.flow +19 -1
- package/package.json +1 -1
- package/query/fetchQuery.js.flow +1 -1
- package/store/DataChecker.js.flow +16 -4
- package/store/OperationExecutor.js.flow +101 -15
- package/store/RelayExperimentalGraphResponseTransform.js.flow +4 -4
- package/store/RelayModernEnvironment.js.flow +22 -6
- package/store/RelayModernFragmentSpecResolver.js.flow +6 -6
- package/store/RelayModernSelector.js.flow +2 -0
- package/store/RelayModernStore.js.flow +86 -27
- package/store/RelayPublishQueue.js.flow +32 -21
- package/store/RelayReader.js.flow +168 -97
- package/store/RelayReferenceMarker.js.flow +15 -5
- package/store/RelayResponseNormalizer.js.flow +104 -69
- package/store/RelayStoreSubscriptions.js.flow +2 -2
- package/store/RelayStoreTypes.js.flow +34 -4
- package/store/RelayStoreUtils.js.flow +29 -0
- package/store/ResolverCache.js.flow +2 -2
- package/store/ResolverFragments.js.flow +5 -3
- package/store/StoreInspector.js.flow +5 -0
- package/store/createRelayContext.js.flow +3 -2
- package/store/createRelayLoggingContext.js.flow +46 -0
- package/store/generateTypenamePrefixedDataID.js.flow +25 -0
- package/store/live-resolvers/LiveResolverCache.js.flow +7 -2
- package/store/live-resolvers/resolverDataInjector.js.flow +10 -6
- package/store/normalizeResponse.js.flow +2 -0
- package/store/observeFragmentExperimental.js.flow +82 -28
- package/store/observeQueryExperimental.js.flow +61 -0
- package/store/waitForFragmentExperimental.js.flow +4 -3
- package/util/NormalizationNode.js.flow +2 -1
- package/util/RelayConcreteNode.js.flow +2 -0
- package/util/RelayError.js.flow +1 -0
- package/util/RelayFeatureFlags.js.flow +28 -0
- package/util/RelayRuntimeTypes.js.flow +6 -3
- package/util/getPaginationVariables.js.flow +2 -0
- package/util/handlePotentialSnapshotErrors.js.flow +23 -11
- package/util/registerEnvironmentWithDevTools.js.flow +4 -2
- package/util/withProvidedVariables.js.flow +1 -0
- package/util/withStartAndDuration.js.flow +3 -0
- package/relay-runtime-experimental.js +0 -4
- package/relay-runtime-experimental.min.js +0 -9
- package/relay-runtime.js +0 -4
- package/relay-runtime.min.js +0 -9
package/experimental.js
CHANGED
package/experimental.js.flow
CHANGED
|
@@ -16,6 +16,7 @@ import type {DataID} from './util/RelayRuntimeTypes';
|
|
|
16
16
|
|
|
17
17
|
const resolverDataInjector = require('./store/live-resolvers/resolverDataInjector');
|
|
18
18
|
const {observeFragment} = require('./store/observeFragmentExperimental');
|
|
19
|
+
const {observeQuery} = require('./store/observeQueryExperimental');
|
|
19
20
|
const {waitForFragmentData} = require('./store/waitForFragmentExperimental');
|
|
20
21
|
|
|
21
22
|
// Annotates a strong object return type, where `A` is the GraphQL typename and `Typename` is the
|
|
@@ -43,13 +44,13 @@ export type IdOf<A: string, Typename: void | string = void> = [
|
|
|
43
44
|
export type RelayResolverValue<A> = $NonMaybeType<A>;
|
|
44
45
|
|
|
45
46
|
type ErrorResult<Error> = {
|
|
46
|
-
ok: false,
|
|
47
|
-
errors: $ReadOnlyArray<Error>,
|
|
47
|
+
+ok: false,
|
|
48
|
+
+errors: $ReadOnlyArray<Error>,
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
type OkayResult<T> = {
|
|
51
|
-
ok: true,
|
|
52
|
-
value: T,
|
|
52
|
+
+ok: true,
|
|
53
|
+
+value: T,
|
|
53
54
|
};
|
|
54
55
|
|
|
55
56
|
export type Result<T, Error> = OkayResult<T> | ErrorResult<Error>;
|
|
@@ -57,19 +58,20 @@ export type Result<T, Error> = OkayResult<T> | ErrorResult<Error>;
|
|
|
57
58
|
function isValueResult<T = mixed>(
|
|
58
59
|
input: Result<T, Error>,
|
|
59
60
|
): input is OkayResult<T> {
|
|
60
|
-
return input.ok === true;
|
|
61
|
+
return input.ok === (true as const);
|
|
61
62
|
}
|
|
62
63
|
|
|
63
64
|
function isErrorResult<T = mixed>(
|
|
64
65
|
input: Result<T, Error>,
|
|
65
66
|
): input is ErrorResult<Error> {
|
|
66
|
-
return input.ok === false;
|
|
67
|
+
return input.ok === (false as const);
|
|
67
68
|
}
|
|
68
69
|
|
|
69
70
|
module.exports = {
|
|
70
71
|
resolverDataInjector,
|
|
71
72
|
isValueResult,
|
|
72
73
|
isErrorResult,
|
|
74
|
+
observeQuery,
|
|
73
75
|
observeFragment,
|
|
74
76
|
waitForFragmentData,
|
|
75
77
|
};
|
package/index.js
CHANGED
package/index.js.flow
CHANGED
|
@@ -35,6 +35,7 @@ const {
|
|
|
35
35
|
} = require('./store/ClientID');
|
|
36
36
|
const createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
|
|
37
37
|
const createRelayContext = require('./store/createRelayContext');
|
|
38
|
+
const createRelayLoggingContext = require('./store/createRelayLoggingContext');
|
|
38
39
|
const isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
|
|
39
40
|
const {
|
|
40
41
|
isSuspenseSentinel,
|
|
@@ -316,6 +317,7 @@ module.exports = {
|
|
|
316
317
|
suspenseSentinel,
|
|
317
318
|
isRequest: GraphQLTag.isRequest,
|
|
318
319
|
readInlineData,
|
|
320
|
+
readFragment: ResolverFragments.readFragment,
|
|
319
321
|
|
|
320
322
|
// Declarative mutation API
|
|
321
323
|
MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
|
|
@@ -379,6 +381,7 @@ module.exports = {
|
|
|
379
381
|
ResolverFragments,
|
|
380
382
|
OperationTracker: RelayOperationTracker,
|
|
381
383
|
createRelayContext: createRelayContext,
|
|
384
|
+
createRelayLoggingContext: createRelayLoggingContext,
|
|
382
385
|
getOperationVariables: RelayConcreteVariables.getOperationVariables,
|
|
383
386
|
getLocalVariables: RelayConcreteVariables.getLocalVariables,
|
|
384
387
|
fetchQuery: fetchQueryInternal.fetchQuery,
|
package/lib/experimental.js
CHANGED
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
var resolverDataInjector = require('./store/live-resolvers/resolverDataInjector');
|
|
4
4
|
var _require = require('./store/observeFragmentExperimental'),
|
|
5
5
|
observeFragment = _require.observeFragment;
|
|
6
|
-
var _require2 = require('./store/
|
|
7
|
-
|
|
6
|
+
var _require2 = require('./store/observeQueryExperimental'),
|
|
7
|
+
observeQuery = _require2.observeQuery;
|
|
8
|
+
var _require3 = require('./store/waitForFragmentExperimental'),
|
|
9
|
+
waitForFragmentData = _require3.waitForFragmentData;
|
|
8
10
|
function isValueResult(input) {
|
|
9
11
|
return input.ok === true;
|
|
10
12
|
}
|
|
@@ -15,6 +17,7 @@ module.exports = {
|
|
|
15
17
|
resolverDataInjector: resolverDataInjector,
|
|
16
18
|
isValueResult: isValueResult,
|
|
17
19
|
isErrorResult: isErrorResult,
|
|
20
|
+
observeQuery: observeQuery,
|
|
18
21
|
observeFragment: observeFragment,
|
|
19
22
|
waitForFragmentData: waitForFragmentData
|
|
20
23
|
};
|
package/lib/index.js
CHANGED
|
@@ -25,6 +25,7 @@ var _require2 = require('./store/ClientID'),
|
|
|
25
25
|
isClientID = _require2.isClientID;
|
|
26
26
|
var createFragmentSpecResolver = require('./store/createFragmentSpecResolver');
|
|
27
27
|
var createRelayContext = require('./store/createRelayContext');
|
|
28
|
+
var createRelayLoggingContext = require('./store/createRelayLoggingContext');
|
|
28
29
|
var isRelayModernEnvironment = require('./store/isRelayModernEnvironment');
|
|
29
30
|
var _require3 = require('./store/live-resolvers/LiveResolverSuspenseSentinel'),
|
|
30
31
|
isSuspenseSentinel = _require3.isSuspenseSentinel,
|
|
@@ -123,6 +124,7 @@ module.exports = {
|
|
|
123
124
|
suspenseSentinel: suspenseSentinel,
|
|
124
125
|
isRequest: GraphQLTag.isRequest,
|
|
125
126
|
readInlineData: readInlineData,
|
|
127
|
+
readFragment: ResolverFragments.readFragment,
|
|
126
128
|
MutationTypes: RelayDeclarativeMutationConfig.MutationTypes,
|
|
127
129
|
RangeOperations: RelayDeclarativeMutationConfig.RangeOperations,
|
|
128
130
|
DefaultHandlerProvider: RelayDefaultHandlerProvider,
|
|
@@ -173,6 +175,7 @@ module.exports = {
|
|
|
173
175
|
ResolverFragments: ResolverFragments,
|
|
174
176
|
OperationTracker: RelayOperationTracker,
|
|
175
177
|
createRelayContext: createRelayContext,
|
|
178
|
+
createRelayLoggingContext: createRelayLoggingContext,
|
|
176
179
|
getOperationVariables: RelayConcreteVariables.getOperationVariables,
|
|
177
180
|
getLocalVariables: RelayConcreteVariables.getLocalVariables,
|
|
178
181
|
fetchQuery: fetchQueryInternal.fetchQuery,
|
|
@@ -16,7 +16,7 @@ var ActorSpecificEnvironment = /*#__PURE__*/function () {
|
|
|
16
16
|
this._operationTracker = new RelayOperationTracker();
|
|
17
17
|
this._store = config.store;
|
|
18
18
|
this._network = wrapNetworkWithLogObserver(this, config.network);
|
|
19
|
-
this._publishQueue = new RelayPublishQueue(config.store, config.handlerProvider, defaultGetDataID, config.missingFieldHandlers);
|
|
19
|
+
this._publishQueue = new RelayPublishQueue(config.store, config.handlerProvider, defaultGetDataID, config.missingFieldHandlers, this.__log);
|
|
20
20
|
this._defaultRenderPolicy = config.defaultRenderPolicy;
|
|
21
21
|
this.options = {
|
|
22
22
|
actorID: this.actorIdentifier
|
|
@@ -14,7 +14,7 @@ var _require4 = require('./readUpdatableQuery'),
|
|
|
14
14
|
var RelayRecordProxy = require('./RelayRecordProxy');
|
|
15
15
|
var invariant = require('invariant');
|
|
16
16
|
var RelayRecordSourceProxy = /*#__PURE__*/function () {
|
|
17
|
-
function RelayRecordSourceProxy(mutator, getDataID, handlerProvider, missingFieldHandlers) {
|
|
17
|
+
function RelayRecordSourceProxy(mutator, getDataID, handlerProvider, missingFieldHandlers, log) {
|
|
18
18
|
this.__mutator = mutator;
|
|
19
19
|
this._handlerProvider = handlerProvider || null;
|
|
20
20
|
this._proxies = {};
|
|
@@ -22,6 +22,7 @@ var RelayRecordSourceProxy = /*#__PURE__*/function () {
|
|
|
22
22
|
this._invalidatedStore = false;
|
|
23
23
|
this._idsMarkedForInvalidation = new Set();
|
|
24
24
|
this._missingFieldHandlers = missingFieldHandlers;
|
|
25
|
+
this._log = log !== null && log !== void 0 ? log : function (LogEvent) {};
|
|
25
26
|
}
|
|
26
27
|
var _proto = RelayRecordSourceProxy.prototype;
|
|
27
28
|
_proto.publishSource = function publishSource(source, fieldPayloads) {
|
|
@@ -71,11 +71,11 @@ function updateProxyFromSelections(mutableUpdatableProxy, updatableProxyRootReco
|
|
|
71
71
|
case 'ClientEdgeToServerObject':
|
|
72
72
|
case 'Defer':
|
|
73
73
|
case 'ModuleImport':
|
|
74
|
-
case 'RelayLiveResolver':
|
|
75
74
|
case 'RequiredField':
|
|
76
75
|
case 'CatchField':
|
|
77
76
|
case 'Stream':
|
|
78
77
|
case 'RelayResolver':
|
|
78
|
+
case 'RelayLiveResolver':
|
|
79
79
|
throw new Error('Encountered an unexpected ReaderSelection variant in RelayRecordSourceProxy. This indicates a bug in Relay.');
|
|
80
80
|
default:
|
|
81
81
|
selection.kind;
|
|
@@ -72,13 +72,13 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
72
72
|
return validateModuleImport(context);
|
|
73
73
|
case 'TypeDiscriminator':
|
|
74
74
|
return validateAbstractKey(context, selection.abstractKey);
|
|
75
|
-
case 'RelayResolver':
|
|
76
|
-
case 'RelayLiveResolver':
|
|
77
75
|
case 'ClientEdgeToClientObject':
|
|
78
76
|
case 'LinkedHandle':
|
|
79
77
|
case 'ScalarHandle':
|
|
80
78
|
case 'Defer':
|
|
81
79
|
case 'Stream':
|
|
80
|
+
case 'RelayResolver':
|
|
81
|
+
case 'RelayLiveResolver':
|
|
82
82
|
{
|
|
83
83
|
return;
|
|
84
84
|
}
|
|
@@ -364,9 +364,7 @@ function _subscribe(source, observer) {
|
|
|
364
364
|
function swallowError(_error, _isUncaughtThrownError) {}
|
|
365
365
|
if (process.env.NODE_ENV !== "production") {
|
|
366
366
|
RelayObservable.onUnhandledError(function (error, isUncaughtThrownError) {
|
|
367
|
-
if (
|
|
368
|
-
fail(String(error));
|
|
369
|
-
} else if (isUncaughtThrownError) {
|
|
367
|
+
if (isUncaughtThrownError) {
|
|
370
368
|
setTimeout(function () {
|
|
371
369
|
throw error;
|
|
372
370
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var generateID = require('../util/generateID');
|
|
4
4
|
function wrapNetworkWithLogObserver(env, network) {
|
|
5
5
|
return {
|
|
6
|
-
execute: function execute(params, variables, cacheConfig, uploadables) {
|
|
6
|
+
execute: function execute(params, variables, cacheConfig, uploadables, _, encryptedVariables, preprocessResponse, checkOperation) {
|
|
7
7
|
var networkRequestId = generateID();
|
|
8
8
|
var logObserver = {
|
|
9
9
|
start: function start(subscription) {
|
|
@@ -49,7 +49,7 @@ function wrapNetworkWithLogObserver(env, network) {
|
|
|
49
49
|
info: info
|
|
50
50
|
});
|
|
51
51
|
};
|
|
52
|
-
return network.execute(params, variables, cacheConfig, uploadables, logRequestInfo)["do"](logObserver);
|
|
52
|
+
return network.execute(params, variables, cacheConfig, uploadables, logRequestInfo, encryptedVariables, preprocessResponse, checkOperation)["do"](logObserver);
|
|
53
53
|
}
|
|
54
54
|
};
|
|
55
55
|
}
|
package/lib/query/fetchQuery.js
CHANGED
|
@@ -21,7 +21,7 @@ function fetchQuery(environment, query, variables, options) {
|
|
|
21
21
|
var operation = createOperationDescriptor(queryNode, variables, networkCacheConfig);
|
|
22
22
|
var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'network-only';
|
|
23
23
|
function readData(snapshot) {
|
|
24
|
-
handlePotentialSnapshotErrors(environment, snapshot.
|
|
24
|
+
handlePotentialSnapshotErrors(environment, snapshot.fieldErrors);
|
|
25
25
|
return snapshot.data;
|
|
26
26
|
}
|
|
27
27
|
switch (fetchPolicy) {
|
package/lib/store/DataChecker.js
CHANGED
|
@@ -23,7 +23,7 @@ var invariant = require('invariant');
|
|
|
23
23
|
var getModuleOperationKey = RelayStoreUtils.getModuleOperationKey,
|
|
24
24
|
getStorageKey = RelayStoreUtils.getStorageKey,
|
|
25
25
|
getArgumentValues = RelayStoreUtils.getArgumentValues;
|
|
26
|
-
function check(getSourceForActor, getTargetForActor, defaultActorIdentifier, selector, handlers, operationLoader, getDataID, shouldProcessClientComponents, log) {
|
|
26
|
+
function check(getSourceForActor, getTargetForActor, defaultActorIdentifier, selector, handlers, operationLoader, getDataID, shouldProcessClientComponents, log, useExecTimeResolvers) {
|
|
27
27
|
if (log != null) {
|
|
28
28
|
log({
|
|
29
29
|
name: 'store.datachecker.start',
|
|
@@ -33,7 +33,7 @@ function check(getSourceForActor, getTargetForActor, defaultActorIdentifier, sel
|
|
|
33
33
|
var dataID = selector.dataID,
|
|
34
34
|
node = selector.node,
|
|
35
35
|
variables = selector.variables;
|
|
36
|
-
var checker = new DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents);
|
|
36
|
+
var checker = new DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents, log, useExecTimeResolvers);
|
|
37
37
|
var result = checker.check(node, dataID);
|
|
38
38
|
if (log != null) {
|
|
39
39
|
log({
|
|
@@ -44,7 +44,7 @@ function check(getSourceForActor, getTargetForActor, defaultActorIdentifier, sel
|
|
|
44
44
|
return result;
|
|
45
45
|
}
|
|
46
46
|
var DataChecker = /*#__PURE__*/function () {
|
|
47
|
-
function DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents) {
|
|
47
|
+
function DataChecker(getSourceForActor, getTargetForActor, defaultActorIdentifier, variables, handlers, operationLoader, getDataID, shouldProcessClientComponents, log, useExecTimeResolvers) {
|
|
48
48
|
this._getSourceForActor = getSourceForActor;
|
|
49
49
|
this._getTargetForActor = getTargetForActor;
|
|
50
50
|
this._getDataID = getDataID;
|
|
@@ -53,6 +53,7 @@ var DataChecker = /*#__PURE__*/function () {
|
|
|
53
53
|
var _this$_getMutatorAndR = this._getMutatorAndRecordProxyForActor(defaultActorIdentifier),
|
|
54
54
|
mutator = _this$_getMutatorAndR[0],
|
|
55
55
|
recordSourceProxy = _this$_getMutatorAndR[1];
|
|
56
|
+
this._useExecTimeResolvers = useExecTimeResolvers !== null && useExecTimeResolvers !== void 0 ? useExecTimeResolvers : false;
|
|
56
57
|
this._mostRecentlyInvalidatedAt = null;
|
|
57
58
|
this._handlers = handlers;
|
|
58
59
|
this._mutator = mutator;
|
|
@@ -61,6 +62,7 @@ var DataChecker = /*#__PURE__*/function () {
|
|
|
61
62
|
this._recordWasMissing = false;
|
|
62
63
|
this._variables = variables;
|
|
63
64
|
this._shouldProcessClientComponents = shouldProcessClientComponents;
|
|
65
|
+
this._log = log;
|
|
64
66
|
}
|
|
65
67
|
var _proto = DataChecker.prototype;
|
|
66
68
|
_proto._getMutatorAndRecordProxyForActor = function _getMutatorAndRecordProxyForActor(actorIdentifier) {
|
|
@@ -68,7 +70,7 @@ var DataChecker = /*#__PURE__*/function () {
|
|
|
68
70
|
if (tuple == null) {
|
|
69
71
|
var target = this._getTargetForActor(actorIdentifier);
|
|
70
72
|
var mutator = new RelayRecordSourceMutator(this._getSourceForActor(actorIdentifier), target);
|
|
71
|
-
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, undefined, this._handlers);
|
|
73
|
+
var recordSourceProxy = new RelayRecordSourceProxy(mutator, this._getDataID, undefined, this._handlers, this._log);
|
|
72
74
|
tuple = [mutator, recordSourceProxy];
|
|
73
75
|
this._mutatorRecordSourceProxyCache.set(actorIdentifier, tuple);
|
|
74
76
|
}
|
|
@@ -275,13 +277,15 @@ var DataChecker = /*#__PURE__*/function () {
|
|
|
275
277
|
_this2._traverseSelections(selection.fragment.selections, dataID);
|
|
276
278
|
break;
|
|
277
279
|
case 'RelayResolver':
|
|
278
|
-
_this2._checkResolver(selection, dataID);
|
|
279
|
-
break;
|
|
280
280
|
case 'RelayLiveResolver':
|
|
281
|
-
_this2.
|
|
281
|
+
if (!_this2._useExecTimeResolvers) {
|
|
282
|
+
_this2._checkResolver(selection, dataID);
|
|
283
|
+
}
|
|
282
284
|
break;
|
|
283
285
|
case 'ClientEdgeToClientObject':
|
|
284
|
-
_this2.
|
|
286
|
+
if (!_this2._useExecTimeResolvers) {
|
|
287
|
+
_this2._checkResolver(selection.backingField, dataID);
|
|
288
|
+
}
|
|
285
289
|
break;
|
|
286
290
|
default:
|
|
287
291
|
selection;
|
|
@@ -31,26 +31,27 @@ function execute(config) {
|
|
|
31
31
|
return new Executor(config);
|
|
32
32
|
}
|
|
33
33
|
var Executor = /*#__PURE__*/function () {
|
|
34
|
-
function Executor(
|
|
34
|
+
function Executor(_ref3) {
|
|
35
35
|
var _this = this;
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
36
|
+
var _ref, _this$_operation$requ, _this$_operation$requ2;
|
|
37
|
+
var actorIdentifier = _ref3.actorIdentifier,
|
|
38
|
+
getDataID = _ref3.getDataID,
|
|
39
|
+
getPublishQueue = _ref3.getPublishQueue,
|
|
40
|
+
getStore = _ref3.getStore,
|
|
41
|
+
isClientPayload = _ref3.isClientPayload,
|
|
42
|
+
operation = _ref3.operation,
|
|
43
|
+
operationExecutions = _ref3.operationExecutions,
|
|
44
|
+
operationLoader = _ref3.operationLoader,
|
|
45
|
+
operationTracker = _ref3.operationTracker,
|
|
46
|
+
optimisticConfig = _ref3.optimisticConfig,
|
|
47
|
+
scheduler = _ref3.scheduler,
|
|
48
|
+
shouldProcessClientComponents = _ref3.shouldProcessClientComponents,
|
|
49
|
+
sink = _ref3.sink,
|
|
50
|
+
source = _ref3.source,
|
|
51
|
+
treatMissingFieldsAsNull = _ref3.treatMissingFieldsAsNull,
|
|
52
|
+
updater = _ref3.updater,
|
|
53
|
+
log = _ref3.log,
|
|
54
|
+
normalizeResponse = _ref3.normalizeResponse;
|
|
54
55
|
this._actorIdentifier = actorIdentifier;
|
|
55
56
|
this._getDataID = getDataID;
|
|
56
57
|
this._treatMissingFieldsAsNull = treatMissingFieldsAsNull;
|
|
@@ -65,6 +66,8 @@ var Executor = /*#__PURE__*/function () {
|
|
|
65
66
|
this._operationTracker = operationTracker;
|
|
66
67
|
this._operationUpdateEpochs = new Map();
|
|
67
68
|
this._optimisticUpdates = null;
|
|
69
|
+
this._useExecTimeResolvers = (_ref = (_this$_operation$requ = this._operation.request.node.operation.use_exec_time_resolvers) !== null && _this$_operation$requ !== void 0 ? _this$_operation$requ : ((_this$_operation$requ2 = this._operation.request.node.operation.exec_time_resolvers_enabled_provider) === null || _this$_operation$requ2 === void 0 ? void 0 : _this$_operation$requ2.get()) === true) !== null && _ref !== void 0 ? _ref : false;
|
|
70
|
+
this._execTimeResolverResponseComplete = false;
|
|
68
71
|
this._pendingModulePayloadsCount = 0;
|
|
69
72
|
this._getPublishQueue = getPublishQueue;
|
|
70
73
|
this._scheduler = scheduler;
|
|
@@ -102,14 +105,20 @@ var Executor = /*#__PURE__*/function () {
|
|
|
102
105
|
}
|
|
103
106
|
},
|
|
104
107
|
start: function start(subscription) {
|
|
105
|
-
var _this$_operation$
|
|
108
|
+
var _this$_operation$requ3;
|
|
106
109
|
_this._start(id, subscription);
|
|
107
110
|
_this._log({
|
|
108
111
|
name: 'execute.start',
|
|
109
112
|
executeId: _this._executeId,
|
|
110
113
|
params: _this._operation.request.node.params,
|
|
111
114
|
variables: _this._operation.request.variables,
|
|
112
|
-
cacheConfig: (_this$_operation$
|
|
115
|
+
cacheConfig: (_this$_operation$requ3 = _this._operation.request.cacheConfig) !== null && _this$_operation$requ3 !== void 0 ? _this$_operation$requ3 : {}
|
|
116
|
+
});
|
|
117
|
+
},
|
|
118
|
+
unsubscribe: function unsubscribe() {
|
|
119
|
+
_this._log({
|
|
120
|
+
name: 'execute.unsubscribe',
|
|
121
|
+
executeId: _this._executeId
|
|
113
122
|
});
|
|
114
123
|
}
|
|
115
124
|
});
|
|
@@ -170,7 +179,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
170
179
|
}
|
|
171
180
|
case 'loading_final':
|
|
172
181
|
{
|
|
173
|
-
activeState = this._pendingModulePayloadsCount > 0 ? 'active' : 'inactive';
|
|
182
|
+
activeState = this._pendingModulePayloadsCount > 0 || this._useExecTimeResolvers && !this._execTimeResolverResponseComplete ? 'active' : 'inactive';
|
|
174
183
|
break;
|
|
175
184
|
}
|
|
176
185
|
default:
|
|
@@ -263,8 +272,8 @@ var Executor = /*#__PURE__*/function () {
|
|
|
263
272
|
return;
|
|
264
273
|
} else if (response.data == null) {
|
|
265
274
|
var errors = response.hasOwnProperty('errors') && response.errors != null ? response.errors : null;
|
|
266
|
-
var messages = errors ? errors.map(function (
|
|
267
|
-
var message =
|
|
275
|
+
var messages = errors ? errors.map(function (_ref4) {
|
|
276
|
+
var message = _ref4.message;
|
|
268
277
|
return message;
|
|
269
278
|
}).join('\n') : '(No errors)';
|
|
270
279
|
var error = RelayError.create('RelayNetwork', 'No data returned for operation `' + _this5._operation.request.node.params.name + '`, got error(s):\n' + messages + '\n\nSee the error `source` property for more information.');
|
|
@@ -331,8 +340,10 @@ var Executor = /*#__PURE__*/function () {
|
|
|
331
340
|
}
|
|
332
341
|
var _partitionGraphQLResp = partitionGraphQLResponses(responsesWithData),
|
|
333
342
|
nonIncrementalResponses = _partitionGraphQLResp[0],
|
|
334
|
-
incrementalResponses = _partitionGraphQLResp[1]
|
|
343
|
+
incrementalResponses = _partitionGraphQLResp[1],
|
|
344
|
+
normalizedResponses = _partitionGraphQLResp[2];
|
|
335
345
|
var hasNonIncrementalResponses = nonIncrementalResponses.length > 0;
|
|
346
|
+
var hasNormalizedResponses = normalizedResponses.length > 0;
|
|
336
347
|
if (hasNonIncrementalResponses) {
|
|
337
348
|
if (this._isSubscriptionOperation) {
|
|
338
349
|
var nextID = generateUniqueClientID();
|
|
@@ -345,9 +356,32 @@ var Executor = /*#__PURE__*/function () {
|
|
|
345
356
|
var payloadFollowups = this._processResponses(nonIncrementalResponses);
|
|
346
357
|
this._processPayloadFollowups(payloadFollowups);
|
|
347
358
|
}
|
|
359
|
+
if (hasNormalizedResponses) {
|
|
360
|
+
var _payloadFollowups = [];
|
|
361
|
+
for (var i = 0; i < normalizedResponses.length; i++) {
|
|
362
|
+
var _response$extensions2;
|
|
363
|
+
var _response = normalizedResponses[i];
|
|
364
|
+
var source = new RelayRecordSource(_response.data);
|
|
365
|
+
var isFinal = ((_response$extensions2 = _response.extensions) === null || _response$extensions2 === void 0 ? void 0 : _response$extensions2.is_final) === true;
|
|
366
|
+
var payload = {
|
|
367
|
+
errors: [],
|
|
368
|
+
fieldPayloads: [],
|
|
369
|
+
followupPayloads: [],
|
|
370
|
+
incrementalPlaceholders: [],
|
|
371
|
+
isFinal: isFinal,
|
|
372
|
+
source: source
|
|
373
|
+
};
|
|
374
|
+
this._getPublishQueueAndSaveActor().commitPayload(this._operation, payload, this._updater);
|
|
375
|
+
_payloadFollowups.push(payload);
|
|
376
|
+
this._execTimeResolverResponseComplete = isFinal;
|
|
377
|
+
if (isFinal) {
|
|
378
|
+
this._updateActiveState();
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
}
|
|
348
382
|
if (incrementalResponses.length > 0) {
|
|
349
|
-
var
|
|
350
|
-
this._processPayloadFollowups(
|
|
383
|
+
var _payloadFollowups2 = this._processIncrementalResponses(incrementalResponses);
|
|
384
|
+
this._processPayloadFollowups(_payloadFollowups2);
|
|
351
385
|
}
|
|
352
386
|
if (this._isSubscriptionOperation) {
|
|
353
387
|
if (responsesWithData[0].extensions == null) {
|
|
@@ -358,7 +392,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
358
392
|
responsesWithData[0].extensions.__relay_subscription_root_id = this._operation.fragment.dataID;
|
|
359
393
|
}
|
|
360
394
|
}
|
|
361
|
-
var updatedOwners = this._runPublishQueue(hasNonIncrementalResponses ? this._operation : undefined);
|
|
395
|
+
var updatedOwners = this._runPublishQueue(hasNonIncrementalResponses || hasNormalizedResponses ? this._operation : undefined);
|
|
362
396
|
if (hasNonIncrementalResponses) {
|
|
363
397
|
if (this._incrementalPayloadsPending) {
|
|
364
398
|
this._retainData();
|
|
@@ -378,10 +412,11 @@ var Executor = /*#__PURE__*/function () {
|
|
|
378
412
|
var payload = this._normalizeResponse(response, this._operation.root, ROOT_TYPE, {
|
|
379
413
|
actorIdentifier: this._actorIdentifier,
|
|
380
414
|
getDataID: this._getDataID,
|
|
415
|
+
log: this._log,
|
|
381
416
|
path: [],
|
|
382
417
|
shouldProcessClientComponents: this._shouldProcessClientComponents,
|
|
383
418
|
treatMissingFieldsAsNull: treatMissingFieldsAsNull
|
|
384
|
-
});
|
|
419
|
+
}, this._useExecTimeResolvers);
|
|
385
420
|
validateOptimisticResponsePayload(payload);
|
|
386
421
|
optimisticUpdates.push({
|
|
387
422
|
operation: this._operation,
|
|
@@ -454,15 +489,20 @@ var Executor = /*#__PURE__*/function () {
|
|
|
454
489
|
variables = followupPayload.variables;
|
|
455
490
|
}
|
|
456
491
|
var selector = createNormalizationSelector(normalizationNode, followupPayload.dataID, variables);
|
|
457
|
-
|
|
458
|
-
data: followupPayload.data
|
|
459
|
-
|
|
492
|
+
var nextResponse = {
|
|
493
|
+
data: followupPayload.data,
|
|
494
|
+
extensions: this._state === 'loading_final' ? {
|
|
495
|
+
is_final: true
|
|
496
|
+
} : undefined
|
|
497
|
+
};
|
|
498
|
+
return this._normalizeResponse(nextResponse, selector, followupPayload.typeName, {
|
|
460
499
|
actorIdentifier: this._actorIdentifier,
|
|
461
500
|
getDataID: this._getDataID,
|
|
501
|
+
log: this._log,
|
|
462
502
|
path: followupPayload.path,
|
|
463
503
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull,
|
|
464
504
|
shouldProcessClientComponents: this._shouldProcessClientComponents
|
|
465
|
-
});
|
|
505
|
+
}, this._useExecTimeResolvers);
|
|
466
506
|
};
|
|
467
507
|
_proto._processOptimisticModuleImport = function _processOptimisticModuleImport(normalizationRootNode, moduleImportPayload) {
|
|
468
508
|
var operation = getOperation(normalizationRootNode);
|
|
@@ -515,10 +555,11 @@ var Executor = /*#__PURE__*/function () {
|
|
|
515
555
|
var relayPayload = _this8._normalizeResponse(payloadPart, _this8._operation.root, ROOT_TYPE, {
|
|
516
556
|
actorIdentifier: _this8._actorIdentifier,
|
|
517
557
|
getDataID: _this8._getDataID,
|
|
558
|
+
log: _this8._log,
|
|
518
559
|
path: [],
|
|
519
560
|
treatMissingFieldsAsNull: _this8._treatMissingFieldsAsNull,
|
|
520
561
|
shouldProcessClientComponents: _this8._shouldProcessClientComponents
|
|
521
|
-
});
|
|
562
|
+
}, _this8._useExecTimeResolvers);
|
|
522
563
|
_this8._getPublishQueueAndSaveActor().commitPayload(_this8._operation, relayPayload, _this8._updater);
|
|
523
564
|
_this8._log({
|
|
524
565
|
name: 'execute.normalize.end',
|
|
@@ -565,7 +606,10 @@ var Executor = /*#__PURE__*/function () {
|
|
|
565
606
|
incrementalPlaceholders.forEach(function (placeholder) {
|
|
566
607
|
if (placeholder.kind === 'defer') {
|
|
567
608
|
relayPayloads.push(_this9._processDeferResponse(placeholder.label, placeholder.path, placeholder, {
|
|
568
|
-
data: placeholder.data
|
|
609
|
+
data: placeholder.data,
|
|
610
|
+
extensions: {
|
|
611
|
+
is_final: true
|
|
612
|
+
}
|
|
569
613
|
}));
|
|
570
614
|
}
|
|
571
615
|
});
|
|
@@ -577,7 +621,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
577
621
|
});
|
|
578
622
|
};
|
|
579
623
|
_proto._maybeCompleteSubscriptionOperationTracking = function _maybeCompleteSubscriptionOperationTracking() {
|
|
580
|
-
if (!this._isSubscriptionOperation) {
|
|
624
|
+
if (!this._isSubscriptionOperation && !(this._useExecTimeResolvers && this._execTimeResolverResponseComplete && this._state === 'loading_final')) {
|
|
581
625
|
return;
|
|
582
626
|
}
|
|
583
627
|
if (this._pendingModulePayloadsCount === 0 && this._incrementalPayloadsPending === false) {
|
|
@@ -801,23 +845,24 @@ var Executor = /*#__PURE__*/function () {
|
|
|
801
845
|
var relayPayload = this._normalizeResponse(response, placeholder.selector, placeholder.typeName, {
|
|
802
846
|
actorIdentifier: this._actorIdentifier,
|
|
803
847
|
getDataID: this._getDataID,
|
|
848
|
+
log: this._log,
|
|
804
849
|
path: placeholder.path,
|
|
805
850
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull,
|
|
806
851
|
shouldProcessClientComponents: this._shouldProcessClientComponents
|
|
807
|
-
});
|
|
852
|
+
}, this._useExecTimeResolvers);
|
|
808
853
|
this._getPublishQueueAndSaveActor().commitPayload(this._operation, relayPayload);
|
|
809
854
|
var parentEntry = this._source.get(parentID);
|
|
810
855
|
!(parentEntry != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'OperationExecutor: Expected the parent record `%s` for @defer ' + 'data to exist.', parentID) : invariant(false) : void 0;
|
|
811
856
|
var fieldPayloads = parentEntry.fieldPayloads;
|
|
812
857
|
if (fieldPayloads.length !== 0) {
|
|
813
|
-
var _response$
|
|
858
|
+
var _response$extensions3;
|
|
814
859
|
var handleFieldsRelayPayload = {
|
|
815
860
|
errors: null,
|
|
816
861
|
fieldPayloads: fieldPayloads,
|
|
817
862
|
incrementalPlaceholders: null,
|
|
818
863
|
followupPayloads: null,
|
|
819
864
|
source: RelayRecordSource.create(),
|
|
820
|
-
isFinal: ((_response$
|
|
865
|
+
isFinal: ((_response$extensions3 = response.extensions) === null || _response$extensions3 === void 0 ? void 0 : _response$extensions3.is_final) === true
|
|
821
866
|
};
|
|
822
867
|
this._getPublishQueueAndSaveActor().commitPayload(this._operation, handleFieldsRelayPayload);
|
|
823
868
|
}
|
|
@@ -873,7 +918,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
873
918
|
return relayPayload;
|
|
874
919
|
};
|
|
875
920
|
_proto._normalizeStreamItem = function _normalizeStreamItem(response, parentID, field, variables, path, normalizationPath) {
|
|
876
|
-
var _field$alias, _field$concreteType,
|
|
921
|
+
var _field$alias, _field$concreteType, _ref2, _this$_getDataID;
|
|
877
922
|
var data = response.data;
|
|
878
923
|
!(typeof data === 'object') ? process.env.NODE_ENV !== "production" ? invariant(false, 'OperationExecutor: Expected the GraphQL @stream payload `data` ' + 'value to be an object.') : invariant(false) : void 0;
|
|
879
924
|
var responseKey = (_field$alias = field.alias) !== null && _field$alias !== void 0 ? _field$alias : field.name;
|
|
@@ -889,7 +934,7 @@ var Executor = /*#__PURE__*/function () {
|
|
|
889
934
|
!(itemIndex === finalPathEntry && itemIndex >= 0) ? process.env.NODE_ENV !== "production" ? invariant(false, 'OperationExecutor: Expected path for @stream to end in a ' + 'positive integer index, got `%s`', finalPathEntry) : invariant(false) : void 0;
|
|
890
935
|
var typeName = (_field$concreteType = field.concreteType) !== null && _field$concreteType !== void 0 ? _field$concreteType : data[TYPENAME_KEY];
|
|
891
936
|
!(typeof typeName === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'OperationExecutor: Expected @stream field `%s` to have a ' + '__typename.', field.name) : invariant(false) : void 0;
|
|
892
|
-
var itemID = (
|
|
937
|
+
var itemID = (_ref2 = (_this$_getDataID = this._getDataID(data, typeName)) !== null && _this$_getDataID !== void 0 ? _this$_getDataID : prevIDs === null || prevIDs === void 0 ? void 0 : prevIDs[itemIndex]) !== null && _ref2 !== void 0 ? _ref2 : generateClientID(parentID, storageKey, itemIndex);
|
|
893
938
|
!(typeof itemID === 'string') ? process.env.NODE_ENV !== "production" ? invariant(false, 'OperationExecutor: Expected id of elements of field `%s` to ' + 'be strings.', storageKey) : invariant(false) : void 0;
|
|
894
939
|
var selector = createNormalizationSelector(field, itemID, variables);
|
|
895
940
|
var nextParentRecord = RelayModernRecord.clone(parentRecord);
|
|
@@ -903,10 +948,11 @@ var Executor = /*#__PURE__*/function () {
|
|
|
903
948
|
var relayPayload = this._normalizeResponse(response, selector, typeName, {
|
|
904
949
|
actorIdentifier: this._actorIdentifier,
|
|
905
950
|
getDataID: this._getDataID,
|
|
951
|
+
log: this._log,
|
|
906
952
|
path: [].concat((0, _toConsumableArray2["default"])(normalizationPath), [responseKey, String(itemIndex)]),
|
|
907
953
|
treatMissingFieldsAsNull: this._treatMissingFieldsAsNull,
|
|
908
954
|
shouldProcessClientComponents: this._shouldProcessClientComponents
|
|
909
|
-
});
|
|
955
|
+
}, this._useExecTimeResolvers);
|
|
910
956
|
return {
|
|
911
957
|
fieldPayloads: fieldPayloads,
|
|
912
958
|
itemID: itemID,
|
|
@@ -1020,7 +1066,9 @@ var Executor = /*#__PURE__*/function () {
|
|
|
1020
1066
|
function partitionGraphQLResponses(responses) {
|
|
1021
1067
|
var nonIncrementalResponses = [];
|
|
1022
1068
|
var incrementalResponses = [];
|
|
1069
|
+
var normalizedResponses = [];
|
|
1023
1070
|
responses.forEach(function (response) {
|
|
1071
|
+
var _response$extensions4;
|
|
1024
1072
|
if (response.path != null || response.label != null) {
|
|
1025
1073
|
var label = response.label,
|
|
1026
1074
|
path = response.path;
|
|
@@ -1032,11 +1080,13 @@ function partitionGraphQLResponses(responses) {
|
|
|
1032
1080
|
path: path,
|
|
1033
1081
|
response: response
|
|
1034
1082
|
});
|
|
1083
|
+
} else if (((_response$extensions4 = response.extensions) === null || _response$extensions4 === void 0 ? void 0 : _response$extensions4.is_normalized) === true) {
|
|
1084
|
+
normalizedResponses.push(response);
|
|
1035
1085
|
} else {
|
|
1036
1086
|
nonIncrementalResponses.push(response);
|
|
1037
1087
|
}
|
|
1038
1088
|
});
|
|
1039
|
-
return [nonIncrementalResponses, incrementalResponses];
|
|
1089
|
+
return [nonIncrementalResponses, incrementalResponses, normalizedResponses];
|
|
1040
1090
|
}
|
|
1041
1091
|
function stableStringify(value) {
|
|
1042
1092
|
var _JSON$stringify;
|