react-relay 14.1.0 → 16.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/ReactRelayContainerUtils.js.flow +1 -0
- package/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +1 -0
- package/ReactRelayFragmentContainer.js.flow +6 -2
- package/ReactRelayFragmentMockRenderer.js.flow +1 -0
- package/ReactRelayLocalQueryRenderer.js.flow +5 -3
- package/ReactRelayPaginationContainer.js.flow +21 -12
- package/ReactRelayQueryFetcher.js.flow +20 -10
- package/ReactRelayQueryRenderer.js.flow +15 -11
- package/ReactRelayQueryRendererContext.js.flow +1 -0
- package/ReactRelayRefetchContainer.js.flow +9 -5
- package/ReactRelayTestMocker.js.flow +3 -1
- package/ReactRelayTypes.js.flow +2 -0
- package/RelayContext.js.flow +1 -0
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -1
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +1 -0
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModern-flowtest.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_badref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_notref.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_user.graphql.js.flow +1 -0
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -0
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +4 -2
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -1
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +3 -1
- package/assertFragmentMap.js.flow +1 -0
- package/buildReactRelayContainer.js.flow +10 -6
- package/getRootVariablesForFragments.js.flow +1 -1
- package/hooks.js +1 -1
- package/hooks.js.flow +4 -0
- package/index.js +1 -1
- package/index.js.flow +4 -0
- package/isRelayEnvironment.js.flow +1 -0
- package/jest-react/enqueueTask.js.flow +1 -1
- package/jest-react/index.js.flow +1 -1
- package/jest-react/internalAct.js.flow +1 -1
- package/legacy.js +1 -1
- package/legacy.js.flow +1 -0
- package/lib/ReactRelayContainerUtils.js +0 -11
- package/lib/ReactRelayContext.js +1 -12
- package/lib/ReactRelayFragmentContainer.js +23 -122
- package/lib/ReactRelayFragmentMockRenderer.js +0 -12
- package/lib/ReactRelayLocalQueryRenderer.js +12 -41
- package/lib/ReactRelayPaginationContainer.js +45 -341
- package/lib/ReactRelayQueryFetcher.js +36 -111
- package/lib/ReactRelayQueryRenderer.js +29 -137
- package/lib/ReactRelayQueryRendererContext.js +0 -10
- package/lib/ReactRelayRefetchContainer.js +33 -166
- package/lib/ReactRelayTestMocker.js +18 -128
- package/lib/ReactRelayTypes.js +0 -9
- package/lib/RelayContext.js +0 -23
- package/lib/assertFragmentMap.js +0 -16
- package/lib/buildReactRelayContainer.js +7 -41
- package/lib/getRootVariablesForFragments.js +2 -19
- package/lib/hooks.js +3 -30
- package/lib/index.js +3 -39
- package/lib/isRelayEnvironment.js +1 -16
- package/lib/jest-react/enqueueTask.js +1 -25
- package/lib/jest-react/index.js +0 -1
- package/lib/jest-react/internalAct.js +2 -51
- package/lib/legacy.js +0 -20
- package/lib/multi-actor/ActorChange.js +0 -14
- package/lib/multi-actor/index.js +0 -10
- package/lib/multi-actor/useRelayActorEnvironment.js +2 -16
- package/lib/relay-hooks/EntryPointContainer.react.js +7 -23
- package/lib/relay-hooks/EntryPointTypes.flow.js +0 -10
- package/lib/relay-hooks/FragmentResource.js +130 -280
- package/lib/relay-hooks/HooksImplementation.js +0 -14
- package/lib/relay-hooks/InternalLogger.js +0 -11
- package/lib/relay-hooks/LRUCache.js +0 -39
- package/lib/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js +27 -65
- package/lib/relay-hooks/MatchContainer.js +9 -111
- package/lib/relay-hooks/NestedRelayEntryPointBuilderUtils.js +9 -0
- package/lib/relay-hooks/ProfilerContext.js +0 -14
- package/lib/relay-hooks/QueryResource.js +14 -149
- package/lib/relay-hooks/RelayEnvironmentProvider.js +3 -17
- package/lib/relay-hooks/SuspenseResource.js +2 -59
- package/lib/relay-hooks/loadEntryPoint.js +10 -45
- package/lib/relay-hooks/loadQuery.js +29 -169
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +8 -58
- package/lib/relay-hooks/prepareEntryPoint_DEPRECATED.js +6 -24
- package/lib/relay-hooks/react-cache/RelayReactCache.js +4 -20
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +13 -102
- package/lib/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js +18 -75
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +79 -222
- package/lib/relay-hooks/react-cache/useFragment_REACT_CACHE.js +3 -27
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +11 -33
- package/lib/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js +62 -85
- package/lib/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js +20 -63
- package/lib/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js +53 -179
- package/lib/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js +5 -27
- package/lib/relay-hooks/useBlockingPaginationFragment.js +58 -121
- package/lib/relay-hooks/useClientQuery.js +0 -21
- package/lib/relay-hooks/useEntryPointLoader.js +12 -100
- package/lib/relay-hooks/useFetchTrackingRef.js +6 -33
- package/lib/relay-hooks/useFragment.js +5 -32
- package/lib/relay-hooks/useFragmentNode.js +14 -55
- package/lib/relay-hooks/useIsMountedRef.js +2 -14
- package/lib/relay-hooks/useIsOperationNodeActive.js +6 -29
- package/lib/relay-hooks/useIsParentQueryActive.js +1 -15
- package/lib/relay-hooks/useLazyLoadQuery.js +2 -23
- package/lib/relay-hooks/useLazyLoadQueryNode.js +18 -63
- package/lib/relay-hooks/useLoadMoreFunction.js +44 -100
- package/lib/relay-hooks/useMemoOperationDescriptor.js +4 -23
- package/lib/relay-hooks/useMemoVariables.js +8 -43
- package/lib/relay-hooks/useMutation.js +6 -34
- package/lib/relay-hooks/usePaginationFragment.js +49 -89
- package/lib/relay-hooks/usePreloadedQuery.js +10 -54
- package/lib/relay-hooks/useQueryLoader.js +18 -116
- package/lib/relay-hooks/useRefetchableFragment.js +4 -30
- package/lib/relay-hooks/useRefetchableFragmentNode.js +58 -184
- package/lib/relay-hooks/useRelayEnvironment.js +2 -16
- package/lib/relay-hooks/useStaticFragmentNodeWarning.js +2 -20
- package/lib/relay-hooks/useSubscribeToInvalidationState.js +3 -28
- package/lib/relay-hooks/useSubscription.js +3 -22
- package/lib/relay-hooks/useUnsafeRef_DEPRECATED.js +12 -0
- package/multi-actor/ActorChange.js.flow +1 -1
- package/multi-actor/index.js.flow +1 -1
- package/multi-actor/useRelayActorEnvironment.js.flow +2 -2
- package/package.json +2 -2
- package/react-relay-hooks.js +2 -2
- package/react-relay-hooks.min.js +2 -2
- package/react-relay-legacy.js +2 -2
- package/react-relay-legacy.min.js +2 -2
- package/react-relay.js +2 -2
- package/react-relay.min.js +2 -2
- package/relay-hooks/EntryPointContainer.react.js.flow +6 -1
- package/relay-hooks/EntryPointTypes.flow.js.flow +23 -20
- package/relay-hooks/FragmentResource.js.flow +148 -34
- package/relay-hooks/HooksImplementation.js.flow +1 -1
- package/relay-hooks/InternalLogger.js.flow +1 -1
- package/relay-hooks/LRUCache.js.flow +1 -1
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +19 -10
- package/relay-hooks/MatchContainer.js.flow +1 -1
- package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +51 -0
- package/relay-hooks/ProfilerContext.js.flow +1 -1
- package/relay-hooks/QueryResource.js.flow +25 -5
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
- package/relay-hooks/SuspenseResource.js.flow +1 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +3 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -7
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +3 -1
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +40 -33
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +1 -1
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +38 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +20 -18
- package/relay-hooks/__flowtests__/utils.js.flow +13 -2
- package/relay-hooks/loadEntryPoint.js.flow +15 -8
- package/relay-hooks/loadQuery.js.flow +32 -8
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +5 -6
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +17 -10
- package/relay-hooks/react-cache/RelayReactCache.js.flow +1 -1
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +4 -4
- package/relay-hooks/react-cache/readFragmentInternal_REACT_CACHE.js.flow +5 -4
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +32 -14
- package/relay-hooks/react-cache/useFragment_REACT_CACHE.js.flow +4 -10
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +1 -1
- package/relay-hooks/react-cache/usePaginationFragment_REACT_CACHE.js.flow +39 -49
- package/relay-hooks/react-cache/usePreloadedQuery_REACT_CACHE.js.flow +1 -2
- package/relay-hooks/react-cache/useRefetchableFragmentInternal_REACT_CACHE.js.flow +29 -16
- package/relay-hooks/react-cache/useRefetchableFragment_REACT_CACHE.js.flow +17 -33
- package/relay-hooks/useBlockingPaginationFragment.js.flow +85 -58
- package/relay-hooks/useClientQuery.js.flow +3 -3
- package/relay-hooks/useEntryPointLoader.js.flow +10 -6
- package/relay-hooks/useFetchTrackingRef.js.flow +5 -4
- package/relay-hooks/useFragment.js.flow +2 -2
- package/relay-hooks/useFragmentNode.js.flow +7 -6
- package/relay-hooks/useIsMountedRef.js.flow +1 -1
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
- package/relay-hooks/useLazyLoadQuery.js.flow +2 -2
- package/relay-hooks/useLazyLoadQueryNode.js.flow +2 -2
- package/relay-hooks/useLoadMoreFunction.js.flow +27 -16
- package/relay-hooks/useMemoOperationDescriptor.js.flow +3 -3
- package/relay-hooks/useMemoVariables.js.flow +13 -29
- package/relay-hooks/useMutation.js.flow +30 -13
- package/relay-hooks/usePaginationFragment.js.flow +55 -54
- package/relay-hooks/usePreloadedQuery.js.flow +47 -22
- package/relay-hooks/useQueryLoader.js.flow +78 -21
- package/relay-hooks/useRefetchableFragment.js.flow +65 -33
- package/relay-hooks/useRefetchableFragmentNode.js.flow +38 -17
- package/relay-hooks/useRelayEnvironment.js.flow +2 -2
- package/relay-hooks/useStaticFragmentNodeWarning.js.flow +3 -3
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +2 -2
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/relay-hooks/useUnsafeRef_DEPRECATED.js.flow +25 -0
- package/lib/readContext.js +0 -27
- package/readContext.js.flow +0 -29
|
@@ -1,41 +1,26 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and 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
|
-
* @emails oncall+relay
|
|
10
|
-
*/
|
|
11
1
|
'use strict';
|
|
12
2
|
|
|
13
3
|
var _require = require('./loadQuery'),
|
|
14
|
-
|
|
15
|
-
|
|
4
|
+
loadQuery = _require.loadQuery;
|
|
16
5
|
function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
|
|
17
|
-
// Start loading the code for the entrypoint
|
|
18
6
|
var loadingPromise = null;
|
|
19
|
-
|
|
20
7
|
if (entryPoint.root.getModuleIfRequired() == null) {
|
|
21
8
|
loadingPromise = entryPoint.root.load();
|
|
22
9
|
}
|
|
23
|
-
|
|
24
10
|
var preloadProps = entryPoint.getPreloadProps(entryPointParams);
|
|
25
11
|
var queries = preloadProps.queries,
|
|
26
|
-
|
|
27
|
-
|
|
12
|
+
entryPoints = preloadProps.entryPoints,
|
|
13
|
+
extraProps = preloadProps.extraProps;
|
|
28
14
|
var preloadedQueries = {};
|
|
29
15
|
var preloadedEntryPoints = {};
|
|
30
|
-
|
|
31
16
|
if (queries != null) {
|
|
32
17
|
var queriesPropNames = Object.keys(queries);
|
|
33
18
|
queriesPropNames.forEach(function (queryPropName) {
|
|
34
19
|
var _queries$queryPropNam = queries[queryPropName],
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
20
|
+
environmentProviderOptions = _queries$queryPropNam.environmentProviderOptions,
|
|
21
|
+
options = _queries$queryPropNam.options,
|
|
22
|
+
parameters = _queries$queryPropNam.parameters,
|
|
23
|
+
variables = _queries$queryPropNam.variables;
|
|
39
24
|
var environment = environmentProvider.getEnvironment(environmentProviderOptions);
|
|
40
25
|
preloadedQueries[queryPropName] = loadQuery(environment, parameters, variables, {
|
|
41
26
|
fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
|
|
@@ -44,75 +29,55 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
|
|
|
44
29
|
}, environmentProviderOptions);
|
|
45
30
|
});
|
|
46
31
|
}
|
|
47
|
-
|
|
48
32
|
if (entryPoints != null) {
|
|
49
33
|
var entryPointPropNames = Object.keys(entryPoints);
|
|
50
34
|
entryPointPropNames.forEach(function (entryPointPropName) {
|
|
51
35
|
var entryPointDescription = entryPoints[entryPointPropName];
|
|
52
|
-
|
|
53
36
|
if (entryPointDescription == null) {
|
|
54
37
|
return;
|
|
55
38
|
}
|
|
56
|
-
|
|
57
39
|
var nestedEntryPoint = entryPointDescription.entryPoint,
|
|
58
|
-
|
|
40
|
+
nestedParams = entryPointDescription.entryPointParams;
|
|
59
41
|
preloadedEntryPoints[entryPointPropName] = loadEntryPoint(environmentProvider, nestedEntryPoint, nestedParams);
|
|
60
42
|
});
|
|
61
43
|
}
|
|
62
|
-
|
|
63
44
|
var isDisposed = false;
|
|
64
45
|
return {
|
|
65
46
|
dispose: function dispose() {
|
|
66
47
|
if (isDisposed) {
|
|
67
48
|
return;
|
|
68
49
|
}
|
|
69
|
-
|
|
70
50
|
if (preloadedQueries != null) {
|
|
71
51
|
Object.values(preloadedQueries).forEach(function (_ref) {
|
|
72
52
|
var innerDispose = _ref.dispose;
|
|
73
53
|
innerDispose();
|
|
74
54
|
});
|
|
75
55
|
}
|
|
76
|
-
|
|
77
56
|
if (preloadedEntryPoints != null) {
|
|
78
57
|
Object.values(preloadedEntryPoints).forEach(function (_ref2) {
|
|
79
58
|
var innerDispose = _ref2.dispose;
|
|
80
59
|
innerDispose();
|
|
81
60
|
});
|
|
82
61
|
}
|
|
83
|
-
|
|
84
62
|
isDisposed = true;
|
|
85
63
|
},
|
|
86
64
|
entryPoints: preloadedEntryPoints,
|
|
87
65
|
extraProps: extraProps !== null && extraProps !== void 0 ? extraProps : null,
|
|
88
66
|
getComponent: function getComponent() {
|
|
89
67
|
var componentModule = entryPoint.root.getModuleIfRequired();
|
|
90
|
-
|
|
91
68
|
if (componentModule == null) {
|
|
92
69
|
var _loadingPromise;
|
|
93
|
-
|
|
94
70
|
loadingPromise = (_loadingPromise = loadingPromise) !== null && _loadingPromise !== void 0 ? _loadingPromise : entryPoint.root.load();
|
|
95
71
|
throw loadingPromise;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
// that it's actually an es6 module wrapper, so unwrap it. This won't work for React classes with a static property named "default", but
|
|
99
|
-
// that's probably a worthwhile trade-off.
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
var component = // $FlowIgnore[prop-missing]
|
|
103
|
-
componentModule["default"] != null ? componentModule["default"] : componentModule; // $FlowFixMe[incompatible-cast] - trust me Flow, its entryPoint component
|
|
104
|
-
|
|
72
|
+
}
|
|
73
|
+
var component = componentModule["default"] != null ? componentModule["default"] : componentModule;
|
|
105
74
|
return component;
|
|
106
75
|
},
|
|
107
|
-
|
|
108
|
-
// $FlowFixMe[unsafe-getters-setters] - this has no side effects
|
|
109
76
|
get isDisposed() {
|
|
110
77
|
return isDisposed;
|
|
111
78
|
},
|
|
112
|
-
|
|
113
79
|
queries: preloadedQueries,
|
|
114
80
|
rootModuleID: entryPoint.root.getModuleId()
|
|
115
81
|
};
|
|
116
82
|
}
|
|
117
|
-
|
|
118
83
|
module.exports = loadEntryPoint;
|
|
@@ -1,132 +1,57 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and 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
|
-
* @emails oncall+relay
|
|
10
|
-
*/
|
|
11
1
|
'use strict';
|
|
12
2
|
|
|
13
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
14
|
-
|
|
15
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
16
|
-
|
|
17
5
|
var invariant = require('invariant');
|
|
18
|
-
|
|
19
6
|
var React = require('react');
|
|
20
|
-
|
|
21
7
|
var _require = require('relay-runtime'),
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
8
|
+
fetchQueryDeduped = _require.__internal.fetchQueryDeduped,
|
|
9
|
+
Observable = _require.Observable,
|
|
10
|
+
PreloadableQueryRegistry = _require.PreloadableQueryRegistry,
|
|
11
|
+
RelayFeatureFlags = _require.RelayFeatureFlags,
|
|
12
|
+
ReplaySubject = _require.ReplaySubject,
|
|
13
|
+
createOperationDescriptor = _require.createOperationDescriptor,
|
|
14
|
+
getRequest = _require.getRequest,
|
|
15
|
+
getRequestIdentifier = _require.getRequestIdentifier;
|
|
31
16
|
var warning = require("fbjs/lib/warning");
|
|
32
|
-
|
|
33
17
|
var RenderDispatcher = null;
|
|
34
18
|
var fetchKey = 100001;
|
|
35
|
-
|
|
36
19
|
function useTrackLoadQueryInRender() {
|
|
37
20
|
if (RenderDispatcher === null) {
|
|
38
21
|
var _React$__SECRET_INTER, _React$__SECRET_INTER2;
|
|
39
|
-
|
|
40
|
-
// Flow does not know of React internals (rightly so), but we need to
|
|
41
|
-
// ensure here that this function isn't called inside render.
|
|
42
|
-
RenderDispatcher = // $FlowFixMe[prop-missing]
|
|
43
|
-
(_React$__SECRET_INTER = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER === void 0 ? void 0 : (_React$__SECRET_INTER2 = _React$__SECRET_INTER.ReactCurrentDispatcher) === null || _React$__SECRET_INTER2 === void 0 ? void 0 : _React$__SECRET_INTER2.current;
|
|
22
|
+
RenderDispatcher = (_React$__SECRET_INTER = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER === void 0 ? void 0 : (_React$__SECRET_INTER2 = _React$__SECRET_INTER.ReactCurrentDispatcher) === null || _React$__SECRET_INTER2 === void 0 ? void 0 : _React$__SECRET_INTER2.current;
|
|
44
23
|
}
|
|
45
24
|
}
|
|
46
|
-
|
|
47
25
|
function loadQuery(environment, preloadableRequest, variables, options, environmentProviderOptions) {
|
|
48
26
|
var _React$__SECRET_INTER3, _React$__SECRET_INTER4, _options$__nameForWar, _options$fetchPolicy;
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
var CurrentDispatcher = // $FlowFixMe[prop-missing]
|
|
52
|
-
(_React$__SECRET_INTER3 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER3 === void 0 ? void 0 : (_React$__SECRET_INTER4 = _React$__SECRET_INTER3.ReactCurrentDispatcher) === null || _React$__SECRET_INTER4 === void 0 ? void 0 : _React$__SECRET_INTER4.current;
|
|
53
|
-
process.env.NODE_ENV !== "production" ? warning(RenderDispatcher == null || CurrentDispatcher !== RenderDispatcher, 'Relay: `%s` should not be called inside a React render function.', (_options$__nameForWar = options === null || options === void 0 ? void 0 : options.__nameForWarning) !== null && _options$__nameForWar !== void 0 ? _options$__nameForWar : 'loadQuery') : void 0; // Every time you call loadQuery, we will generate a new fetchKey.
|
|
54
|
-
// This will ensure that every query reference that is created and
|
|
55
|
-
// passed to usePreloadedQuery is independently evaluated,
|
|
56
|
-
// even if they are for the same query/variables.
|
|
57
|
-
// Specifically, we want to avoid a case where we try to refetch a
|
|
58
|
-
// query by calling loadQuery a second time, and have the Suspense
|
|
59
|
-
// cache in usePreloadedQuery reuse the cached result instead of
|
|
60
|
-
// re-evaluating the new query ref and triggering a refetch if
|
|
61
|
-
// necessary.
|
|
62
|
-
|
|
27
|
+
var CurrentDispatcher = (_React$__SECRET_INTER3 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER3 === void 0 ? void 0 : (_React$__SECRET_INTER4 = _React$__SECRET_INTER3.ReactCurrentDispatcher) === null || _React$__SECRET_INTER4 === void 0 ? void 0 : _React$__SECRET_INTER4.current;
|
|
28
|
+
process.env.NODE_ENV !== "production" ? warning(RenderDispatcher == null || CurrentDispatcher !== RenderDispatcher, 'Relay: `%s` should not be called inside a React render function.', (_options$__nameForWar = options === null || options === void 0 ? void 0 : options.__nameForWarning) !== null && _options$__nameForWar !== void 0 ? _options$__nameForWar : 'loadQuery') : void 0;
|
|
63
29
|
fetchKey++;
|
|
64
30
|
var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'store-or-network';
|
|
65
31
|
var networkCacheConfig = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options === null || options === void 0 ? void 0 : options.networkCacheConfig), {}, {
|
|
66
32
|
force: true
|
|
67
|
-
});
|
|
68
|
-
// against the Relay store, given an Observable that would provide
|
|
69
|
-
// the network events for the operation.
|
|
70
|
-
|
|
33
|
+
});
|
|
71
34
|
var retainReference;
|
|
72
35
|
var didExecuteNetworkSource = false;
|
|
73
|
-
|
|
74
36
|
var executeWithNetworkSource = function executeWithNetworkSource(operation, networkObservable) {
|
|
75
37
|
didExecuteNetworkSource = true;
|
|
76
38
|
return environment.executeWithSource({
|
|
77
39
|
operation: operation,
|
|
78
40
|
source: networkObservable
|
|
79
41
|
});
|
|
80
|
-
};
|
|
81
|
-
// that isn't lazily executed, meaning that we don't want to wait
|
|
82
|
-
// until the returned Observable is subscribed to to actually start
|
|
83
|
-
// fetching and executing an operation; i.e. we want to execute the
|
|
84
|
-
// operation eagerly, when loadQuery is called.
|
|
85
|
-
// For this reason, we use an intermediate executionSubject which
|
|
86
|
-
// allows us to capture the events that occur during the eager execution
|
|
87
|
-
// of the operation, and then replay them to the Observable we
|
|
88
|
-
// ultimately return.
|
|
89
|
-
|
|
90
|
-
|
|
42
|
+
};
|
|
91
43
|
var executionSubject = new ReplaySubject();
|
|
92
44
|
var returnedObservable = Observable.create(function (sink) {
|
|
93
45
|
return executionSubject.subscribe(sink);
|
|
94
46
|
});
|
|
95
47
|
var unsubscribeFromNetworkRequest;
|
|
96
|
-
var networkError = null;
|
|
97
|
-
// one isn't already in flight and return an Observable that when
|
|
98
|
-
// subscribed to will replay the network events that have occured so far,
|
|
99
|
-
// as well as subsequent events.
|
|
100
|
-
|
|
48
|
+
var networkError = null;
|
|
101
49
|
var didMakeNetworkRequest = false;
|
|
102
|
-
|
|
103
50
|
var makeNetworkRequest = function makeNetworkRequest(params) {
|
|
104
|
-
// N.B. this function is called synchronously or not at all
|
|
105
|
-
// didMakeNetworkRequest is safe to rely on in the returned value
|
|
106
|
-
// Even if the request gets deduped below, we still wan't to return an
|
|
107
|
-
// observable that provides the replayed network events for the query,
|
|
108
|
-
// so we set this to true before deduping, to guarantee that the
|
|
109
|
-
// `source` observable is returned.
|
|
110
51
|
didMakeNetworkRequest = true;
|
|
111
52
|
var observable;
|
|
112
53
|
var subject = new ReplaySubject();
|
|
113
|
-
|
|
114
54
|
if (RelayFeatureFlags.ENABLE_LOAD_QUERY_REQUEST_DEDUPING === true) {
|
|
115
|
-
// Here, we are calling fetchQueryDeduped at the network layer level,
|
|
116
|
-
// which ensures that only a single network request is active for a given
|
|
117
|
-
// (environment, identifier) pair.
|
|
118
|
-
// Since network requests can be started /before/ we have the query ast
|
|
119
|
-
// necessary to process the results, we need to dedupe the raw requests
|
|
120
|
-
// separately from deduping the operation execution; specifically,
|
|
121
|
-
// if `loadQuery` is called multiple times before the query ast is available,
|
|
122
|
-
// we still want the network request to be deduped.
|
|
123
|
-
// - If a duplicate active network request is found, it will return an
|
|
124
|
-
// Observable that replays the events of the already active request.
|
|
125
|
-
// - If no duplicate active network request is found, it will call the fetchFn
|
|
126
|
-
// to start the request, and return an Observable that will replay
|
|
127
|
-
// the events from the network request.
|
|
128
|
-
// We provide an extra key to the identifier to distinguish deduping
|
|
129
|
-
// of raw network requests vs deduping of operation executions.
|
|
130
55
|
var identifier = 'raw-network-request-' + getRequestIdentifier(params, variables);
|
|
131
56
|
observable = fetchQueryDeduped(environment, identifier, function () {
|
|
132
57
|
var network = environment.getNetwork();
|
|
@@ -136,21 +61,19 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
136
61
|
var network = environment.getNetwork();
|
|
137
62
|
observable = network.execute(params, variables, networkCacheConfig);
|
|
138
63
|
}
|
|
139
|
-
|
|
140
64
|
var _observable$subscribe = observable.subscribe({
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
65
|
+
error: function error(err) {
|
|
66
|
+
networkError = err;
|
|
67
|
+
subject.error(err);
|
|
68
|
+
},
|
|
69
|
+
next: function next(data) {
|
|
70
|
+
subject.next(data);
|
|
71
|
+
},
|
|
72
|
+
complete: function complete() {
|
|
73
|
+
subject.complete();
|
|
74
|
+
}
|
|
75
|
+
}),
|
|
76
|
+
unsubscribe = _observable$subscribe.unsubscribe;
|
|
154
77
|
unsubscribeFromNetworkRequest = unsubscribe;
|
|
155
78
|
return Observable.create(function (sink) {
|
|
156
79
|
var subjectSubscription = subject.subscribe(sink);
|
|
@@ -160,36 +83,11 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
160
83
|
};
|
|
161
84
|
});
|
|
162
85
|
};
|
|
163
|
-
|
|
164
86
|
var unsubscribeFromExecution;
|
|
165
|
-
|
|
166
87
|
var executeDeduped = function executeDeduped(operation, fetchFn) {
|
|
167
88
|
if (RelayFeatureFlags.ENABLE_LOAD_QUERY_REQUEST_DEDUPING === true) {
|
|
168
|
-
// N.B. at this point, if we're calling execute with a query ast (OperationDescriptor),
|
|
169
|
-
// we are guaranteed to have started a network request. We set this to
|
|
170
|
-
// true here as well since `makeNetworkRequest` might get skipped in the case
|
|
171
|
-
// where the query ast is already available and the query executions get deduped.
|
|
172
|
-
// Even if the execution gets deduped below, we still wan't to return
|
|
173
|
-
// an observable that provides the replayed network events for the query,
|
|
174
|
-
// so we set this to true before deduping, to guarantee that the `source`
|
|
175
|
-
// observable is returned.
|
|
176
89
|
didMakeNetworkRequest = true;
|
|
177
|
-
}
|
|
178
|
-
// a single operation is active for a given (environment, identifier) pair,
|
|
179
|
-
// and also tracks the active state of the operation, which is necessary
|
|
180
|
-
// for our Suspense infra to later be able to suspend (or not) on
|
|
181
|
-
// active operations. Even though we already dedupe raw network requests,
|
|
182
|
-
// we also need to dedupe and keep track operation execution for our Suspense
|
|
183
|
-
// infra, and we also want to avoid processing responses more than once, for
|
|
184
|
-
// the cases where `loadQuery` might be called multiple times after the query ast
|
|
185
|
-
// is available.
|
|
186
|
-
// - If a duplicate active operation is found, it will return an
|
|
187
|
-
// Observable that replays the events of the already active operation.
|
|
188
|
-
// - If no duplicate active operation is found, it will call the fetchFn
|
|
189
|
-
// to execute the operation, and return an Observable that will provide
|
|
190
|
-
// the events for executing the operation.
|
|
191
|
-
|
|
192
|
-
|
|
90
|
+
}
|
|
193
91
|
var _fetchQueryDeduped$su = fetchQueryDeduped(environment, operation.request.identifier, fetchFn).subscribe({
|
|
194
92
|
error: function error(err) {
|
|
195
93
|
executionSubject.error(err);
|
|
@@ -201,71 +99,47 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
201
99
|
executionSubject.complete();
|
|
202
100
|
}
|
|
203
101
|
});
|
|
204
|
-
|
|
205
102
|
unsubscribeFromExecution = _fetchQueryDeduped$su.unsubscribe;
|
|
206
103
|
};
|
|
207
|
-
|
|
208
104
|
var checkAvailabilityAndExecute = function checkAvailabilityAndExecute(concreteRequest) {
|
|
209
105
|
var operation = createOperationDescriptor(concreteRequest, variables, networkCacheConfig);
|
|
210
106
|
retainReference = environment.retain(operation);
|
|
211
|
-
|
|
212
107
|
if (fetchPolicy === 'store-only') {
|
|
213
108
|
return;
|
|
214
|
-
}
|
|
215
|
-
// environment already has the data for that operation cached in the store,
|
|
216
|
-
// then we do nothing.
|
|
217
|
-
|
|
218
|
-
|
|
109
|
+
}
|
|
219
110
|
var shouldFetch = fetchPolicy !== 'store-or-network' || environment.check(operation).status !== 'available';
|
|
220
|
-
|
|
221
111
|
if (shouldFetch) {
|
|
222
112
|
executeDeduped(operation, function () {
|
|
223
|
-
// N.B. Since we have the operation synchronously available here,
|
|
224
|
-
// we can immediately fetch and execute the operation.
|
|
225
113
|
var networkObservable = makeNetworkRequest(concreteRequest.params);
|
|
226
114
|
var executeObservable = executeWithNetworkSource(operation, networkObservable);
|
|
227
115
|
return executeObservable;
|
|
228
116
|
});
|
|
229
117
|
}
|
|
230
118
|
};
|
|
231
|
-
|
|
232
119
|
var params;
|
|
233
120
|
var cancelOnLoadCallback;
|
|
234
121
|
var queryId;
|
|
235
|
-
|
|
236
122
|
if (preloadableRequest.kind === 'PreloadableConcreteRequest') {
|
|
237
123
|
var preloadableConcreteRequest = preloadableRequest;
|
|
238
124
|
params = preloadableConcreteRequest.params;
|
|
239
125
|
var _params = params;
|
|
240
126
|
queryId = _params.id;
|
|
241
127
|
!(queryId !== null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: `loadQuery` requires that preloadable query `%s` has a persisted query id', params.name) : invariant(false) : void 0;
|
|
242
|
-
|
|
243
128
|
var _module = PreloadableQueryRegistry.get(queryId);
|
|
244
|
-
|
|
245
129
|
if (_module != null) {
|
|
246
130
|
checkAvailabilityAndExecute(_module);
|
|
247
131
|
} else {
|
|
248
|
-
|
|
249
|
-
// network request immediately if the fetchPolicy might produce
|
|
250
|
-
// a network fetch, regardless of the state of the store cache. We
|
|
251
|
-
// do this because we can't check if a query is cached without the
|
|
252
|
-
// ast, and we know that if we don't have the query ast
|
|
253
|
-
// available, then this query could've never been written to the
|
|
254
|
-
// store in the first place, so it couldn't have been cached.
|
|
255
|
-
var networkObservable = fetchPolicy === 'store-only' ? null : makeNetworkRequest(params); // $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
256
|
-
|
|
132
|
+
var networkObservable = fetchPolicy === 'store-only' ? null : makeNetworkRequest(params);
|
|
257
133
|
var _PreloadableQueryRegi = PreloadableQueryRegistry.onLoad(queryId, function (preloadedModule) {
|
|
258
134
|
cancelOnLoadCallback();
|
|
259
135
|
var operation = createOperationDescriptor(preloadedModule, variables, networkCacheConfig);
|
|
260
136
|
retainReference = environment.retain(operation);
|
|
261
|
-
|
|
262
137
|
if (networkObservable != null) {
|
|
263
138
|
executeDeduped(operation, function () {
|
|
264
139
|
return executeWithNetworkSource(operation, networkObservable);
|
|
265
140
|
});
|
|
266
141
|
}
|
|
267
142
|
});
|
|
268
|
-
|
|
269
143
|
cancelOnLoadCallback = _PreloadableQueryRegi.dispose;
|
|
270
144
|
}
|
|
271
145
|
} else {
|
|
@@ -275,35 +149,28 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
275
149
|
queryId = params.cacheID != null ? params.cacheID : params.id;
|
|
276
150
|
checkAvailabilityAndExecute(request);
|
|
277
151
|
}
|
|
278
|
-
|
|
279
152
|
var isDisposed = false;
|
|
280
153
|
var isReleased = false;
|
|
281
154
|
var isNetworkRequestCancelled = false;
|
|
282
|
-
|
|
283
155
|
var releaseQuery = function releaseQuery() {
|
|
284
156
|
if (isReleased) {
|
|
285
157
|
return;
|
|
286
158
|
}
|
|
287
|
-
|
|
288
159
|
retainReference && retainReference.dispose();
|
|
289
160
|
isReleased = true;
|
|
290
161
|
};
|
|
291
|
-
|
|
292
162
|
var cancelNetworkRequest = function cancelNetworkRequest() {
|
|
293
163
|
if (isNetworkRequestCancelled) {
|
|
294
164
|
return;
|
|
295
165
|
}
|
|
296
|
-
|
|
297
166
|
if (didExecuteNetworkSource) {
|
|
298
167
|
unsubscribeFromExecution && unsubscribeFromExecution();
|
|
299
168
|
} else {
|
|
300
169
|
unsubscribeFromNetworkRequest && unsubscribeFromNetworkRequest();
|
|
301
170
|
}
|
|
302
|
-
|
|
303
171
|
cancelOnLoadCallback && cancelOnLoadCallback();
|
|
304
172
|
isNetworkRequestCancelled = true;
|
|
305
173
|
};
|
|
306
|
-
|
|
307
174
|
return {
|
|
308
175
|
kind: 'PreloadedQuery',
|
|
309
176
|
environment: environment,
|
|
@@ -312,7 +179,6 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
312
179
|
if (isDisposed) {
|
|
313
180
|
return;
|
|
314
181
|
}
|
|
315
|
-
|
|
316
182
|
releaseQuery();
|
|
317
183
|
cancelNetworkRequest();
|
|
318
184
|
isDisposed = true;
|
|
@@ -321,17 +187,12 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
321
187
|
cancelNetworkRequest: cancelNetworkRequest,
|
|
322
188
|
fetchKey: fetchKey,
|
|
323
189
|
id: queryId,
|
|
324
|
-
|
|
325
|
-
// $FlowFixMe[unsafe-getters-setters] - this has no side effects
|
|
326
190
|
get isDisposed() {
|
|
327
191
|
return isDisposed || isReleased;
|
|
328
192
|
},
|
|
329
|
-
|
|
330
|
-
// $FlowFixMe[unsafe-getters-setters] - this has no side effects
|
|
331
193
|
get networkError() {
|
|
332
194
|
return networkError;
|
|
333
195
|
},
|
|
334
|
-
|
|
335
196
|
name: params.name,
|
|
336
197
|
networkCacheConfig: networkCacheConfig,
|
|
337
198
|
fetchPolicy: fetchPolicy,
|
|
@@ -339,7 +200,6 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
|
|
|
339
200
|
variables: variables
|
|
340
201
|
};
|
|
341
202
|
}
|
|
342
|
-
|
|
343
203
|
module.exports = {
|
|
344
204
|
loadQuery: loadQuery,
|
|
345
205
|
useTrackLoadQueryInRender: useTrackLoadQueryInRender
|
|
@@ -1,71 +1,43 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) Meta Platforms, Inc. and 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
1
|
'use strict';
|
|
12
2
|
|
|
13
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
|
|
14
|
-
|
|
15
4
|
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
16
|
-
|
|
17
5
|
var _require = require('relay-runtime'),
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
var DEFAULT_PREFETCH_TIMEOUT = 30 * 1000; // 30 seconds
|
|
28
|
-
|
|
6
|
+
Observable = _require.Observable,
|
|
7
|
+
PreloadableQueryRegistry = _require.PreloadableQueryRegistry,
|
|
8
|
+
ReplaySubject = _require.ReplaySubject,
|
|
9
|
+
createOperationDescriptor = _require.createOperationDescriptor,
|
|
10
|
+
getRequest = _require.getRequest,
|
|
11
|
+
getRequestIdentifier = _require.getRequestIdentifier;
|
|
12
|
+
var DEFAULT_PREFETCH_TIMEOUT = 30 * 1000;
|
|
29
13
|
var WEAKMAP_SUPPORTED = typeof WeakMap === 'function';
|
|
30
14
|
var STORE_OR_NETWORK_DEFAULT = 'store-or-network';
|
|
31
15
|
var pendingQueriesByEnvironment = WEAKMAP_SUPPORTED ? new WeakMap() : new Map();
|
|
32
|
-
|
|
33
16
|
function preloadQuery(environment, preloadableRequest, variables, options, environmentProviderOptions) {
|
|
34
17
|
var _pendingQueries = pendingQueriesByEnvironment.get(environment);
|
|
35
|
-
|
|
36
18
|
if (_pendingQueries == null) {
|
|
37
19
|
_pendingQueries = new Map();
|
|
38
20
|
pendingQueriesByEnvironment.set(environment, _pendingQueries);
|
|
39
21
|
}
|
|
40
|
-
|
|
41
|
-
var pendingQueries = _pendingQueries; // store in a const for flow
|
|
42
|
-
|
|
22
|
+
var pendingQueries = _pendingQueries;
|
|
43
23
|
var queryEntry = preloadQueryDeduped(environment, pendingQueries, preloadableRequest, variables, options);
|
|
44
24
|
var source = queryEntry.kind === 'network' ? Observable.create(function (sink) {
|
|
45
25
|
var subscription;
|
|
46
|
-
|
|
47
26
|
if (pendingQueries.get(queryEntry.cacheKey) == null) {
|
|
48
27
|
var newQueryEntry = preloadQueryDeduped(environment, pendingQueries, preloadableRequest, variables, options);
|
|
49
|
-
|
|
50
28
|
if (newQueryEntry.kind === 'network') {
|
|
51
29
|
subscription = newQueryEntry.subject.subscribe(sink);
|
|
52
30
|
}
|
|
53
31
|
} else {
|
|
54
32
|
subscription = queryEntry.subject.subscribe(sink);
|
|
55
33
|
}
|
|
56
|
-
|
|
57
34
|
return function () {
|
|
58
35
|
var _subscription;
|
|
59
|
-
|
|
60
36
|
(_subscription = subscription) === null || _subscription === void 0 ? void 0 : _subscription.unsubscribe();
|
|
61
|
-
|
|
62
37
|
if (environment.isServer()) {
|
|
63
38
|
return;
|
|
64
39
|
}
|
|
65
|
-
|
|
66
40
|
setTimeout(function () {
|
|
67
|
-
// Clear the cache entry after the default timeout
|
|
68
|
-
// null-check for Flow
|
|
69
41
|
if (queryEntry != null) {
|
|
70
42
|
cleanup(pendingQueries, queryEntry);
|
|
71
43
|
}
|
|
@@ -86,13 +58,10 @@ function preloadQuery(environment, preloadableRequest, variables, options, envir
|
|
|
86
58
|
status: queryEntry.status
|
|
87
59
|
};
|
|
88
60
|
}
|
|
89
|
-
|
|
90
61
|
function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, variables, options) {
|
|
91
62
|
var _options$fetchPolicy;
|
|
92
|
-
|
|
93
63
|
var params;
|
|
94
64
|
var query;
|
|
95
|
-
|
|
96
65
|
if (preloadableRequest.kind === 'PreloadableConcreteRequest') {
|
|
97
66
|
var preloadableConcreteRequest = preloadableRequest;
|
|
98
67
|
params = preloadableConcreteRequest.params;
|
|
@@ -101,7 +70,6 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
|
|
|
101
70
|
query = getRequest(preloadableRequest);
|
|
102
71
|
params = query.params;
|
|
103
72
|
}
|
|
104
|
-
|
|
105
73
|
var network = environment.getNetwork();
|
|
106
74
|
var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : STORE_OR_NETWORK_DEFAULT;
|
|
107
75
|
var fetchKey = options === null || options === void 0 ? void 0 : options.fetchKey;
|
|
@@ -114,10 +82,8 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
|
|
|
114
82
|
status: 'missing'
|
|
115
83
|
};
|
|
116
84
|
var nextQueryEntry;
|
|
117
|
-
|
|
118
85
|
if (availability.status === 'available' && query != null) {
|
|
119
86
|
var _availability$fetchTi;
|
|
120
|
-
|
|
121
87
|
nextQueryEntry = prevQueryEntry && prevQueryEntry.kind === 'cache' ? prevQueryEntry : {
|
|
122
88
|
cacheKey: cacheKey,
|
|
123
89
|
fetchKey: fetchKey,
|
|
@@ -131,18 +97,14 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
|
|
|
131
97
|
fetchTime: (_availability$fetchTi = availability === null || availability === void 0 ? void 0 : availability.fetchTime) !== null && _availability$fetchTi !== void 0 ? _availability$fetchTi : null
|
|
132
98
|
}
|
|
133
99
|
};
|
|
134
|
-
|
|
135
100
|
if (!environment.isServer() && prevQueryEntry == null) {
|
|
136
101
|
setTimeout(function () {
|
|
137
|
-
// Clear the cache entry after the default timeout
|
|
138
|
-
// null-check for Flow
|
|
139
102
|
if (nextQueryEntry != null) {
|
|
140
103
|
cleanup(pendingQueries, nextQueryEntry);
|
|
141
104
|
}
|
|
142
105
|
}, DEFAULT_PREFETCH_TIMEOUT);
|
|
143
106
|
}
|
|
144
107
|
} else if (prevQueryEntry == null || prevQueryEntry.kind !== 'network') {
|
|
145
|
-
// Should fetch but we're not already fetching: fetch!
|
|
146
108
|
var source = network.execute(params, variables, networkCacheConfig, null);
|
|
147
109
|
var subject = new ReplaySubject();
|
|
148
110
|
nextQueryEntry = {
|
|
@@ -162,10 +124,7 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
|
|
|
162
124
|
if (environment.isServer()) {
|
|
163
125
|
return;
|
|
164
126
|
}
|
|
165
|
-
|
|
166
127
|
setTimeout(function () {
|
|
167
|
-
// Clear the cache entry after the default timeout
|
|
168
|
-
// null-check for Flow
|
|
169
128
|
if (nextQueryEntry != null) {
|
|
170
129
|
cleanup(pendingQueries, nextQueryEntry);
|
|
171
130
|
}
|
|
@@ -185,25 +144,16 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
|
|
|
185
144
|
} else {
|
|
186
145
|
nextQueryEntry = prevQueryEntry;
|
|
187
146
|
}
|
|
188
|
-
|
|
189
147
|
pendingQueries.set(cacheKey, nextQueryEntry);
|
|
190
148
|
return nextQueryEntry;
|
|
191
149
|
}
|
|
192
|
-
|
|
193
150
|
function cleanup(pendingQueries, entry) {
|
|
194
|
-
// Reload the entry by its cache key and only invalidate if its the identical
|
|
195
|
-
// entry instance. This ensures that if the same query/variables are fetched
|
|
196
|
-
// successively that a timeout/expiration from an earlier fetch doesn't clear
|
|
197
|
-
// a subsequent fetch.
|
|
198
151
|
var currentEntry = pendingQueries.get(entry.cacheKey);
|
|
199
|
-
|
|
200
152
|
if (currentEntry != null && currentEntry === entry) {
|
|
201
153
|
if (currentEntry.kind === 'network') {
|
|
202
154
|
currentEntry.subscription.unsubscribe();
|
|
203
155
|
}
|
|
204
|
-
|
|
205
156
|
pendingQueries["delete"](currentEntry.cacheKey);
|
|
206
157
|
}
|
|
207
158
|
}
|
|
208
|
-
|
|
209
159
|
module.exports = preloadQuery;
|