react-relay 20.1.1 → 21.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/ReactRelayContext.js +1 -1
- package/ReactRelayContext.js.flow +2 -2
- package/ReactRelayFragmentContainer.js.flow +8 -9
- package/ReactRelayLocalQueryRenderer.js.flow +11 -3
- package/ReactRelayLoggingContext.js.flow +3 -3
- package/ReactRelayPaginationContainer.js.flow +31 -24
- package/ReactRelayQueryFetcher.js.flow +1 -1
- package/ReactRelayQueryRenderer.js.flow +2 -2
- package/ReactRelayQueryRendererContext.js.flow +2 -2
- package/ReactRelayRefetchContainer.js.flow +17 -14
- package/ReactRelayTestMocker.js.flow +10 -10
- package/ReactRelayTypes.js.flow +18 -20
- package/RelayContext.js.flow +3 -3
- package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +11 -11
- package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +5 -5
- package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +5 -5
- package/__flowtests__/RelayModern-flowtest.js.flow +24 -27
- package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -1
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +9 -10
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +4 -5
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +9 -10
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +4 -5
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -4
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +5 -6
- package/buildReactRelayContainer.js.flow +4 -4
- package/getRootVariablesForFragments.js.flow +1 -1
- package/hooks.js +1 -1
- package/hooks.js.flow +23 -8
- package/index.js +1 -1
- package/index.js.flow +40 -14
- package/isRelayEnvironment.js.flow +1 -1
- package/jest-react/internalAct.js.flow +1 -1
- package/legacy.js +1 -1
- package/legacy.js.flow +32 -13
- package/lib/ReactRelayFragmentContainer.js +1 -1
- package/lib/ReactRelayPaginationContainer.js +8 -8
- package/lib/ReactRelayRefetchContainer.js +8 -8
- package/lib/ReactRelayTestMocker.js +5 -5
- package/lib/hooks.js +18 -8
- package/lib/index.js +30 -14
- package/lib/legacy.js +26 -13
- package/lib/relay-hooks/legacy/useBlockingPaginationFragment.js +5 -5
- package/lib/relay-hooks/legacy/useRefetchableFragmentNode.js +34 -34
- package/lib/relay-hooks/loadEntryPoint.js +2 -2
- package/lib/relay-hooks/loadQuery.js +14 -14
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -10
- package/lib/relay-hooks/readFragmentInternal.js +6 -6
- package/lib/relay-hooks/rsc/serverFetchQuery.js +20 -0
- package/lib/relay-hooks/rsc/serverPreloadQuery.js +31 -0
- package/lib/relay-hooks/rsc/serverReadFragment.js +15 -0
- package/lib/relay-hooks/rsc/useQueryFromServer.js +62 -0
- package/lib/relay-hooks/useFragmentInternal_CURRENT.js +49 -25
- package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +81 -44
- package/lib/relay-hooks/useLazyLoadQueryNode.js +32 -19
- package/lib/relay-hooks/useMutation.js +6 -14
- package/lib/relay-hooks/useMutationAction_EXPERIMENTAL.js +26 -0
- package/lib/relay-hooks/usePreloadedQuery.js +52 -47
- package/lib/relay-hooks/useQueryLoader.js +2 -2
- package/lib/relay-hooks/useQueryLoader_EXPERIMENTAL.js +2 -2
- package/lib/relay-hooks/useRefetchableFragmentInternal.js +31 -31
- package/lib/rsc-client_EXPERIMENTAL.js +7 -0
- package/lib/rsc_EXPERIMENTAL.js +43 -0
- package/multi-actor/ActorChange.js.flow +1 -1
- package/package.json +3 -2
- package/relay-hooks/EntryPointContainer.react.js.flow +6 -6
- package/relay-hooks/EntryPointTypes.flow.js.flow +61 -67
- package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +23 -21
- package/relay-hooks/MatchContainer.js.flow +12 -6
- package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +3 -9
- package/relay-hooks/QueryResource.js.flow +6 -6
- package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
- package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +6 -6
- package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +48 -1
- package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -9
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -4
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +5 -6
- package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +27 -32
- package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +25 -25
- package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +26 -32
- package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +23 -30
- package/relay-hooks/__flowtests__/utils.js.flow +4 -4
- package/relay-hooks/getConnectionState.js.flow +2 -2
- package/relay-hooks/legacy/FragmentResource.js.flow +13 -13
- package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +24 -25
- package/relay-hooks/legacy/useFragmentNode.js.flow +4 -4
- package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +79 -81
- package/relay-hooks/loadEntryPoint.js.flow +15 -13
- package/relay-hooks/loadQuery.js.flow +18 -18
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +16 -13
- package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -7
- package/relay-hooks/readFragmentInternal.js.flow +9 -9
- package/relay-hooks/rsc/serverFetchQuery.js.flow +31 -0
- package/relay-hooks/rsc/serverPreloadQuery.js.flow +69 -0
- package/relay-hooks/rsc/serverReadFragment.js.flow +33 -0
- package/relay-hooks/rsc/useQueryFromServer.js.flow +135 -0
- package/relay-hooks/useClientQuery.js.flow +2 -2
- package/relay-hooks/useEntryPointLoader.js.flow +11 -11
- package/relay-hooks/useFragment.js.flow +7 -7
- package/relay-hooks/useFragmentInternal.js.flow +1 -1
- package/relay-hooks/useFragmentInternal_CURRENT.js.flow +54 -22
- package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +95 -46
- package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
- package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
- package/relay-hooks/useLazyLoadQuery.js.flow +10 -3
- package/relay-hooks/useLazyLoadQueryNode.js.flow +67 -28
- package/relay-hooks/useLoadMoreFunction.js.flow +7 -6
- package/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js.flow +5 -5
- package/relay-hooks/useMemoVariables.js.flow +1 -1
- package/relay-hooks/useMutation.js.flow +8 -16
- package/relay-hooks/useMutationAction_EXPERIMENTAL.js.flow +68 -0
- package/relay-hooks/usePaginationFragment.js.flow +15 -11
- package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +19 -18
- package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +19 -18
- package/relay-hooks/usePreloadedQuery.js.flow +119 -85
- package/relay-hooks/useQueryLoader.js.flow +27 -23
- package/relay-hooks/useQueryLoader_EXPERIMENTAL.js.flow +10 -10
- package/relay-hooks/useRefetchableFragment.js.flow +16 -11
- package/relay-hooks/useRefetchableFragmentInternal.js.flow +77 -79
- package/relay-hooks/useRelayLoggingContext.js.flow +1 -1
- package/relay-hooks/useSubscribeToInvalidationState.js.flow +1 -1
- package/relay-hooks/useSubscription.js.flow +1 -1
- package/rsc-client_EXPERIMENTAL.js +10 -0
- package/rsc-client_EXPERIMENTAL.js.flow +23 -0
- package/rsc_EXPERIMENTAL.js +10 -0
- package/rsc_EXPERIMENTAL.js.flow +90 -0
|
@@ -13,64 +13,69 @@ var _require2 = require('relay-runtime'),
|
|
|
13
13
|
var warning = require("fbjs/lib/warning");
|
|
14
14
|
function usePreloadedQuery(gqlQuery, preloadedQuery, options) {
|
|
15
15
|
var environment = useRelayEnvironment();
|
|
16
|
-
var
|
|
17
|
-
fetchPolicy = preloadedQuery.fetchPolicy,
|
|
18
|
-
source = preloadedQuery.source,
|
|
19
|
-
variables = preloadedQuery.variables,
|
|
20
|
-
networkCacheConfig = preloadedQuery.networkCacheConfig;
|
|
21
|
-
var operation = useMemoOperationDescriptor(gqlQuery, variables, networkCacheConfig);
|
|
16
|
+
var operation = useMemoOperationDescriptor(gqlQuery, preloadedQuery != null ? preloadedQuery.variables : {}, preloadedQuery != null ? preloadedQuery.networkCacheConfig : undefined);
|
|
22
17
|
var useLazyLoadQueryNodeParams;
|
|
23
|
-
if (preloadedQuery
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (source != null && environment === preloadedQuery.environment) {
|
|
49
|
-
fetchObservable = source.ifEmpty(fallbackFetchObservable);
|
|
50
|
-
} else if (environment !== preloadedQuery.environment) {
|
|
51
|
-
process.env.NODE_ENV !== "production" ? warning(false, 'usePreloadedQuery(): usePreloadedQuery was passed a preloaded query ' + 'that was created with a different environment than the one that is currently ' + 'in context. In the future, this will become a hard error.') : void 0;
|
|
52
|
-
fetchObservable = fallbackFetchObservable;
|
|
18
|
+
if (preloadedQuery != null) {
|
|
19
|
+
var fetchKey = preloadedQuery.fetchKey,
|
|
20
|
+
fetchPolicy = preloadedQuery.fetchPolicy,
|
|
21
|
+
source = preloadedQuery.source;
|
|
22
|
+
if (preloadedQuery.kind === 'PreloadedQuery_DEPRECATED') {
|
|
23
|
+
!(operation.request.node.params.name === preloadedQuery.name) ? process.env.NODE_ENV !== "production" ? invariant(false, 'usePreloadedQuery(): Expected data to be prefetched for query `%s`, ' + 'got prefetch results for query `%s`.', operation.request.node.params.name, preloadedQuery.name) : invariant(false) : void 0;
|
|
24
|
+
useLazyLoadQueryNodeParams = {
|
|
25
|
+
componentDisplayName: 'usePreloadedQuery()',
|
|
26
|
+
fetchKey: fetchKey,
|
|
27
|
+
fetchObservable: fetchQueryDeduped(environment, operation.request.identifier, function () {
|
|
28
|
+
if (environment === preloadedQuery.environment && source != null) {
|
|
29
|
+
return environment.executeWithSource({
|
|
30
|
+
operation: operation,
|
|
31
|
+
source: source
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
return environment.execute({
|
|
35
|
+
operation: operation
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}),
|
|
39
|
+
fetchPolicy: fetchPolicy,
|
|
40
|
+
query: operation,
|
|
41
|
+
renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy
|
|
42
|
+
};
|
|
53
43
|
} else {
|
|
54
|
-
|
|
44
|
+
process.env.NODE_ENV !== "production" ? warning(preloadedQuery.isDisposed === false, 'usePreloadedQuery(): Expected preloadedQuery to not be disposed yet. ' + 'This is because disposing the query marks it for future garbage ' + 'collection, and as such query results may no longer be present in the Relay ' + 'store. In the future, this will become a hard error.') : void 0;
|
|
45
|
+
var fallbackFetchObservable = fetchQuery(environment, operation);
|
|
46
|
+
var fetchObservable;
|
|
47
|
+
if (source != null && environment === preloadedQuery.environment) {
|
|
48
|
+
fetchObservable = source.ifEmpty(fallbackFetchObservable);
|
|
49
|
+
} else if (environment !== preloadedQuery.environment) {
|
|
50
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'usePreloadedQuery(): usePreloadedQuery was passed a preloaded query ' + 'that was created with a different environment than the one that is currently ' + 'in context. In the future, this will become a hard error.') : void 0;
|
|
51
|
+
fetchObservable = fallbackFetchObservable;
|
|
52
|
+
} else {
|
|
53
|
+
fetchObservable = fallbackFetchObservable;
|
|
54
|
+
}
|
|
55
|
+
useLazyLoadQueryNodeParams = {
|
|
56
|
+
componentDisplayName: 'usePreloadedQuery()',
|
|
57
|
+
fetchKey: fetchKey,
|
|
58
|
+
fetchObservable: fetchObservable,
|
|
59
|
+
fetchPolicy: fetchPolicy,
|
|
60
|
+
query: operation,
|
|
61
|
+
renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy
|
|
62
|
+
};
|
|
55
63
|
}
|
|
64
|
+
} else {
|
|
56
65
|
useLazyLoadQueryNodeParams = {
|
|
57
66
|
componentDisplayName: 'usePreloadedQuery()',
|
|
58
|
-
|
|
59
|
-
fetchKey: fetchKey,
|
|
60
|
-
fetchPolicy: fetchPolicy,
|
|
61
|
-
query: operation,
|
|
62
|
-
renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy
|
|
67
|
+
fragmentNode: gqlQuery.fragment
|
|
63
68
|
};
|
|
64
69
|
}
|
|
65
70
|
var data = useLazyLoadQueryNode(useLazyLoadQueryNodeParams);
|
|
66
71
|
if (process.env.NODE_ENV !== "production") {
|
|
67
72
|
useDebugValue({
|
|
68
|
-
query: preloadedQuery.name,
|
|
69
|
-
variables: preloadedQuery.variables,
|
|
70
73
|
data: data,
|
|
71
|
-
fetchKey: fetchKey,
|
|
72
|
-
fetchPolicy: fetchPolicy,
|
|
73
|
-
|
|
74
|
+
fetchKey: preloadedQuery === null || preloadedQuery === void 0 ? void 0 : preloadedQuery.fetchKey,
|
|
75
|
+
fetchPolicy: preloadedQuery === null || preloadedQuery === void 0 ? void 0 : preloadedQuery.fetchPolicy,
|
|
76
|
+
query: preloadedQuery === null || preloadedQuery === void 0 ? void 0 : preloadedQuery.name,
|
|
77
|
+
renderPolicy: options === null || options === void 0 ? void 0 : options.UNSTABLE_renderPolicy,
|
|
78
|
+
variables: preloadedQuery === null || preloadedQuery === void 0 ? void 0 : preloadedQuery.variables
|
|
74
79
|
});
|
|
75
80
|
}
|
|
76
81
|
return data;
|
|
@@ -59,9 +59,9 @@ function useQueryLoader_CURRENT(preloadableRequest, initialQueryReference) {
|
|
|
59
59
|
}, [isMountedRef]);
|
|
60
60
|
var queryLoaderCallback = useCallback(function (variables, options) {
|
|
61
61
|
var mergedOptions = options != null && options.hasOwnProperty('__environment') ? {
|
|
62
|
+
__nameForWarning: options.__nameForWarning,
|
|
62
63
|
fetchPolicy: options.fetchPolicy,
|
|
63
|
-
networkCacheConfig: options.networkCacheConfig
|
|
64
|
-
__nameForWarning: options.__nameForWarning
|
|
64
|
+
networkCacheConfig: options.networkCacheConfig
|
|
65
65
|
} : options;
|
|
66
66
|
if (isMountedRef.current) {
|
|
67
67
|
var _options$__environmen;
|
|
@@ -62,9 +62,9 @@ function useQueryLoader_EXPERIMENTAL(preloadableRequest, initialQueryReference)
|
|
|
62
62
|
return;
|
|
63
63
|
}
|
|
64
64
|
var mergedOptions = options != null && options.hasOwnProperty('__environment') ? {
|
|
65
|
+
__nameForWarning: options.__nameForWarning,
|
|
65
66
|
fetchPolicy: options.fetchPolicy,
|
|
66
|
-
networkCacheConfig: options.networkCacheConfig
|
|
67
|
-
__nameForWarning: options.__nameForWarning
|
|
67
|
+
networkCacheConfig: options.networkCacheConfig
|
|
68
68
|
} : options;
|
|
69
69
|
var updatedQueryReference = loadQuery((_options$__environmen = options === null || options === void 0 ? void 0 : options.__environment) !== null && _options$__environmen !== void 0 ? _options$__environmen : environment, preloadableRequest, variables, mergedOptions);
|
|
70
70
|
(_undisposedQueryRefer3 = undisposedQueryReferencesRef.current) === null || _undisposedQueryRefer3 === void 0 ? void 0 : _undisposedQueryRefer3.add(updatedQueryReference);
|
|
@@ -91,9 +91,9 @@ function useRefetchableFragmentInternal(fragmentNode, parentFragmentRef, compone
|
|
|
91
91
|
var fragmentRef = parentFragmentRef;
|
|
92
92
|
if (shouldReset) {
|
|
93
93
|
dispatch({
|
|
94
|
-
type: 'reset',
|
|
95
94
|
environment: environment,
|
|
96
|
-
fragmentIdentifier: fragmentIdentifier
|
|
95
|
+
fragmentIdentifier: fragmentIdentifier,
|
|
96
|
+
type: 'reset'
|
|
97
97
|
});
|
|
98
98
|
disposeQuery();
|
|
99
99
|
} else if (refetchQuery != null && queryRef != null) {
|
|
@@ -107,13 +107,13 @@ function useRefetchableFragmentInternal(fragmentNode, parentFragmentRef, compone
|
|
|
107
107
|
var fetchObservable = queryRef.source != null ? queryRef.source : fetchQuery(environment, refetchQuery);
|
|
108
108
|
var queryResult = profilerContext.wrapPrepareQueryResource(function () {
|
|
109
109
|
return QueryResource.prepare(refetchQuery, fetchObservable, fetchPolicy, renderPolicy, {
|
|
110
|
-
error: handleQueryCompleted,
|
|
111
110
|
complete: function complete() {
|
|
112
111
|
if (process.env.NODE_ENV !== "production") {
|
|
113
112
|
debugFunctions.checkSameTypeAfterRefetch(debugPreviousIDAndTypename, environment, fragmentNode, componentDisplayName);
|
|
114
113
|
}
|
|
115
114
|
handleQueryCompleted();
|
|
116
|
-
}
|
|
115
|
+
},
|
|
116
|
+
error: handleQueryCompleted
|
|
117
117
|
}, queryRef.fetchKey, profilerContext);
|
|
118
118
|
});
|
|
119
119
|
var queryData = readFragmentInternal(environment, queryResult.fragmentNode, queryResult.fragmentRef, componentDisplayName).data;
|
|
@@ -174,17 +174,17 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
|
|
|
174
174
|
force: true
|
|
175
175
|
});
|
|
176
176
|
loadQuery(refetchQuery.request.variables, {
|
|
177
|
-
fetchPolicy: fetchPolicy,
|
|
178
177
|
__environment: refetchEnvironment,
|
|
179
|
-
__nameForWarning: 'refetch'
|
|
178
|
+
__nameForWarning: 'refetch',
|
|
179
|
+
fetchPolicy: fetchPolicy
|
|
180
180
|
});
|
|
181
181
|
dispatch({
|
|
182
|
-
type: 'refetch',
|
|
183
182
|
fetchPolicy: fetchPolicy,
|
|
184
183
|
onComplete: onComplete,
|
|
185
184
|
refetchEnvironment: refetchEnvironment,
|
|
186
185
|
refetchQuery: refetchQuery,
|
|
187
|
-
renderPolicy: renderPolicy
|
|
186
|
+
renderPolicy: renderPolicy,
|
|
187
|
+
type: 'refetch'
|
|
188
188
|
});
|
|
189
189
|
return {
|
|
190
190
|
dispose: disposeQuery
|
|
@@ -194,23 +194,16 @@ function useRefetchFunction(componentDisplayName, dispatch, disposeQuery, fragme
|
|
|
194
194
|
var debugFunctions;
|
|
195
195
|
if (process.env.NODE_ENV !== "production") {
|
|
196
196
|
debugFunctions = {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
var id = memoRefetchVariables === null || memoRefetchVariables === void 0 ? void 0 : memoRefetchVariables[identifierQueryVariableName !== null && identifierQueryVariableName !== void 0 ? identifierQueryVariableName : 'id'];
|
|
201
|
-
if (fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || id == null) {
|
|
202
|
-
return null;
|
|
197
|
+
checkSameIDAfterRefetch: function checkSameIDAfterRefetch(previousIDAndTypename, refetchedFragmentRef, fragmentNode, componentDisplayName) {
|
|
198
|
+
if (previousIDAndTypename == null || refetchedFragmentRef == null) {
|
|
199
|
+
return;
|
|
203
200
|
}
|
|
204
|
-
var
|
|
205
|
-
|
|
206
|
-
var
|
|
207
|
-
if (
|
|
208
|
-
|
|
201
|
+
var _require4 = require('relay-runtime'),
|
|
202
|
+
ID_KEY = _require4.ID_KEY;
|
|
203
|
+
var resultID = refetchedFragmentRef[ID_KEY];
|
|
204
|
+
if (resultID != null && resultID !== previousIDAndTypename.id) {
|
|
205
|
+
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned a different id, expected ' + '`%s`, got `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements ' + 'unique id requirement.', resultID, previousIDAndTypename.id, fragmentNode.name, componentDisplayName) : void 0;
|
|
209
206
|
}
|
|
210
|
-
return {
|
|
211
|
-
id: id,
|
|
212
|
-
typename: typename
|
|
213
|
-
};
|
|
214
207
|
},
|
|
215
208
|
checkSameTypeAfterRefetch: function checkSameTypeAfterRefetch(previousIDAndType, environment, fragmentNode, componentDisplayName) {
|
|
216
209
|
var _require5 = require('relay-runtime'),
|
|
@@ -225,16 +218,23 @@ if (process.env.NODE_ENV !== "production") {
|
|
|
225
218
|
process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Call to `refetch` returned data with a different ' + '__typename: was `%s`, now `%s`, on `%s` in `%s`. ' + 'Please make sure the server correctly implements' + 'unique id requirement.', previousIDAndType.typename, typename, fragmentNode.name, componentDisplayName) : void 0;
|
|
226
219
|
}
|
|
227
220
|
},
|
|
228
|
-
|
|
229
|
-
if (previousIDAndTypename == null || refetchedFragmentRef == null) {
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
221
|
+
getInitialIDAndType: function getInitialIDAndType(memoRefetchVariables, fragmentRefPathInResponse, identifierQueryVariableName, environment) {
|
|
232
222
|
var _require6 = require('relay-runtime'),
|
|
233
|
-
|
|
234
|
-
var
|
|
235
|
-
if (
|
|
236
|
-
|
|
223
|
+
Record = _require6.Record;
|
|
224
|
+
var id = memoRefetchVariables === null || memoRefetchVariables === void 0 ? void 0 : memoRefetchVariables[identifierQueryVariableName !== null && identifierQueryVariableName !== void 0 ? identifierQueryVariableName : 'id'];
|
|
225
|
+
if (fragmentRefPathInResponse.length !== 1 || fragmentRefPathInResponse[0] !== 'node' || id == null) {
|
|
226
|
+
return null;
|
|
237
227
|
}
|
|
228
|
+
var recordSource = environment.getStore().getSource();
|
|
229
|
+
var record = recordSource.get(id);
|
|
230
|
+
var typename = record == null ? null : Record.getType(record);
|
|
231
|
+
if (typename == null) {
|
|
232
|
+
return null;
|
|
233
|
+
}
|
|
234
|
+
return {
|
|
235
|
+
id: id,
|
|
236
|
+
typename: typename
|
|
237
|
+
};
|
|
238
238
|
}
|
|
239
239
|
};
|
|
240
240
|
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _asyncToGenerator = require("@babel/runtime/helpers/asyncToGenerator").default;
|
|
4
|
+
var serverFetchQueryImpl = require('./relay-hooks/rsc/serverFetchQuery');
|
|
5
|
+
var serverPreloadQueryImpl = require('./relay-hooks/rsc/serverPreloadQuery');
|
|
6
|
+
var serverReadFragmentImpl = require('./relay-hooks/rsc/serverReadFragment');
|
|
7
|
+
var invariant = require('invariant');
|
|
8
|
+
var React = require('react');
|
|
9
|
+
function createServerEnvironment(create) {
|
|
10
|
+
var cache = React.cache;
|
|
11
|
+
!(typeof cache === 'function') ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay RSC APIs require React 19+') : invariant(false) : void 0;
|
|
12
|
+
var getEnvironment = cache(create);
|
|
13
|
+
function serverFetchQuery(_x, _x2) {
|
|
14
|
+
return _serverFetchQuery.apply(this, arguments);
|
|
15
|
+
}
|
|
16
|
+
function _serverFetchQuery() {
|
|
17
|
+
_serverFetchQuery = _asyncToGenerator(function* (query, variables) {
|
|
18
|
+
return serverFetchQueryImpl(getEnvironment(), query, variables);
|
|
19
|
+
});
|
|
20
|
+
return _serverFetchQuery.apply(this, arguments);
|
|
21
|
+
}
|
|
22
|
+
function serverPreloadQuery(query, variables) {
|
|
23
|
+
return serverPreloadQueryImpl(getEnvironment(), query, variables);
|
|
24
|
+
}
|
|
25
|
+
function serverReadFragment(_x3, _x4) {
|
|
26
|
+
return _serverReadFragment.apply(this, arguments);
|
|
27
|
+
}
|
|
28
|
+
function _serverReadFragment() {
|
|
29
|
+
_serverReadFragment = _asyncToGenerator(function* (fragment, fragmentRef) {
|
|
30
|
+
return serverReadFragmentImpl(getEnvironment(), fragment, fragmentRef);
|
|
31
|
+
});
|
|
32
|
+
return _serverReadFragment.apply(this, arguments);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
getEnvironment: getEnvironment,
|
|
36
|
+
serverFetchQuery: serverFetchQuery,
|
|
37
|
+
serverPreloadQuery: serverPreloadQuery,
|
|
38
|
+
serverReadFragment: serverReadFragment
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
module.exports = {
|
|
42
|
+
createServerEnvironment: createServerEnvironment
|
|
43
|
+
};
|
|
@@ -17,7 +17,7 @@ const RelayEnvironmentProvider = require('../relay-hooks/RelayEnvironmentProvide
|
|
|
17
17
|
const useRelayActorEnvironment = require('./useRelayActorEnvironment');
|
|
18
18
|
const React = require('react');
|
|
19
19
|
|
|
20
|
-
export opaque type ActorChangePoint<TFragmentRef> =
|
|
20
|
+
export opaque type ActorChangePoint<TFragmentRef> = Readonly<{
|
|
21
21
|
__fragmentRef: TFragmentRef,
|
|
22
22
|
__viewer: ActorIdentifier,
|
|
23
23
|
}>;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-relay",
|
|
3
3
|
"description": "A framework for building GraphQL-driven React applications.",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "21.0.0",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
7
7
|
"relay",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"fbjs": "^3.0.2",
|
|
21
21
|
"invariant": "^2.2.4",
|
|
22
22
|
"nullthrows": "^1.1.1",
|
|
23
|
-
"relay-runtime": "
|
|
23
|
+
"relay-runtime": "21.0.0"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"react": "^16.9.0 || ^17 || ^18 || ^19"
|
|
@@ -29,5 +29,6 @@
|
|
|
29
29
|
"": "./"
|
|
30
30
|
},
|
|
31
31
|
"main": "index.js",
|
|
32
|
+
"types": "index.d.ts",
|
|
32
33
|
"haste_commonjs": true
|
|
33
34
|
}
|
|
@@ -24,16 +24,16 @@ const warning = require('warning');
|
|
|
24
24
|
|
|
25
25
|
component EntryPointContainer<
|
|
26
26
|
// $FlowFixMe[unsupported-variance-annotation]
|
|
27
|
-
TRuntimeProps
|
|
28
|
-
TRenders
|
|
27
|
+
TRuntimeProps extends {...},
|
|
28
|
+
TRenders extends React.Node,
|
|
29
29
|
// $FlowFixMe[unsupported-variance-annotation]
|
|
30
|
-
TEntryPointComponent
|
|
31
|
-
// $
|
|
30
|
+
TEntryPointComponent extends EntryPointComponent<
|
|
31
|
+
// $FlowExpectedError[unclear-type] s[unclear-type] Use any to accept all kinds of EntryPointComponent
|
|
32
32
|
any,
|
|
33
|
-
// $
|
|
33
|
+
// $FlowExpectedError[unclear-type] s[unclear-type] Use any to accept all kinds of EntryPointComponent
|
|
34
34
|
any,
|
|
35
35
|
TRuntimeProps,
|
|
36
|
-
// $
|
|
36
|
+
// $FlowExpectedError[unclear-type] s[unclear-type] Use any to accept all kinds of EntryPointComponent
|
|
37
37
|
any,
|
|
38
38
|
TRenders,
|
|
39
39
|
>,
|
|
@@ -37,6 +37,7 @@ export type PreloadOptions = {
|
|
|
37
37
|
+fetchKey?: string | number,
|
|
38
38
|
+fetchPolicy?: ?PreloadFetchPolicy,
|
|
39
39
|
+includeIf?: ?boolean,
|
|
40
|
+
+enableForOfflineCacheJob?: ?boolean,
|
|
40
41
|
+prefetchExpiryInHours?: ?number,
|
|
41
42
|
+networkCacheConfig?: ?CacheConfig,
|
|
42
43
|
};
|
|
@@ -47,7 +48,7 @@ export type LoadQueryOptions = {
|
|
|
47
48
|
+__nameForWarning?: ?string,
|
|
48
49
|
};
|
|
49
50
|
|
|
50
|
-
export type PreloadableConcreteRequest<+TQuery
|
|
51
|
+
export type PreloadableConcreteRequest<+TQuery extends OperationType> = {
|
|
51
52
|
kind: 'PreloadableConcreteRequest',
|
|
52
53
|
params: RequestParameters,
|
|
53
54
|
// Note: the phantom type parameter here helps ensures that the
|
|
@@ -58,17 +59,17 @@ export type PreloadableConcreteRequest<+TQuery: OperationType> = {
|
|
|
58
59
|
+__phantom__?: ?TQuery,
|
|
59
60
|
};
|
|
60
61
|
|
|
61
|
-
export type EnvironmentProviderOptions = {+[string]:
|
|
62
|
+
export type EnvironmentProviderOptions = {+[string]: unknown, ...};
|
|
62
63
|
|
|
63
64
|
export type PreloadedQuery<
|
|
64
|
-
+TQuery
|
|
65
|
+
+TQuery extends OperationType,
|
|
65
66
|
TEnvironmentProviderOptions = EnvironmentProviderOptions,
|
|
66
67
|
> =
|
|
67
68
|
| PreloadedQueryInner_DEPRECATED<TQuery, TEnvironmentProviderOptions>
|
|
68
69
|
| PreloadedQueryInner<TQuery, TEnvironmentProviderOptions>;
|
|
69
70
|
|
|
70
71
|
export type PreloadedQueryInner_DEPRECATED<
|
|
71
|
-
+TQuery
|
|
72
|
+
+TQuery extends OperationType,
|
|
72
73
|
TEnvironmentProviderOptions = EnvironmentProviderOptions,
|
|
73
74
|
> = {
|
|
74
75
|
+kind: 'PreloadedQuery_DEPRECATED',
|
|
@@ -85,7 +86,7 @@ export type PreloadedQueryInner_DEPRECATED<
|
|
|
85
86
|
};
|
|
86
87
|
|
|
87
88
|
export type PreloadedQueryInner<
|
|
88
|
-
+TQuery
|
|
89
|
+
+TQuery extends OperationType,
|
|
89
90
|
TEnvironmentProviderOptions = EnvironmentProviderOptions,
|
|
90
91
|
> = {
|
|
91
92
|
// Releases query data and cancels network request if still in flight
|
|
@@ -125,40 +126,21 @@ Every .entrypoint file it's an object that must have two required fields:
|
|
|
125
126
|
TEntryPointParams - object that contains all necessary information to execute
|
|
126
127
|
the preloaders (routeParams, query variables)
|
|
127
128
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
TPreloadedEntryPoints - nested entry points, defined in the root components
|
|
131
|
-
|
|
132
|
-
TRuntimeProps - the type of additional props that you may pass to the
|
|
133
|
-
component (like `onClick` handler, etc) during runtime. Values for them
|
|
134
|
-
defined during component runtime
|
|
135
|
-
|
|
136
|
-
TExtraProps - a bag of extra props that you may define in `entrypoint` file
|
|
137
|
-
and they will be passed to the EntryPointComponent as `extraProps`
|
|
129
|
+
TEntryPointComponent - the root components
|
|
138
130
|
*/
|
|
139
|
-
export type
|
|
140
|
-
TEntryPointParams,
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
TExtraProps = null,
|
|
145
|
-
> = $ReadOnly<{
|
|
131
|
+
export type EntryPoint<
|
|
132
|
+
-TEntryPointParams,
|
|
133
|
+
// $FlowExpectedError[unclear-type] accepts any root component
|
|
134
|
+
+TEntryPointComponent extends EntryPointComponent<any, any, any, any, any>,
|
|
135
|
+
> = Readonly<{
|
|
146
136
|
getPreloadProps: (
|
|
147
137
|
entryPointParams: TEntryPointParams,
|
|
148
138
|
) => PreloadProps<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
TExtraProps,
|
|
153
|
-
>,
|
|
154
|
-
root: JSResourceReference<
|
|
155
|
-
EntryPointComponent<
|
|
156
|
-
TPreloadedQueries,
|
|
157
|
-
TPreloadedEntryPoints,
|
|
158
|
-
TRuntimeProps,
|
|
159
|
-
TExtraProps,
|
|
160
|
-
>,
|
|
139
|
+
ElementConfig<TEntryPointComponent>['queries'],
|
|
140
|
+
ElementConfig<TEntryPointComponent>['entryPoints'],
|
|
141
|
+
ElementConfig<TEntryPointComponent>['extraProps'],
|
|
161
142
|
>,
|
|
143
|
+
root: JSResourceReference<TEntryPointComponent>,
|
|
162
144
|
}>;
|
|
163
145
|
|
|
164
146
|
// The shape of the props of the entry point `root` component
|
|
@@ -167,20 +149,36 @@ export type EntryPointProps<
|
|
|
167
149
|
TPreloadedEntryPoints = {},
|
|
168
150
|
TRuntimeProps = {},
|
|
169
151
|
TExtraProps = null,
|
|
170
|
-
> =
|
|
152
|
+
> = Readonly<{
|
|
171
153
|
entryPoints: TPreloadedEntryPoints,
|
|
172
154
|
extraProps: TExtraProps | null,
|
|
173
155
|
props: TRuntimeProps,
|
|
174
156
|
queries: TPreloadedQueries,
|
|
175
157
|
}>;
|
|
176
158
|
|
|
177
|
-
|
|
159
|
+
/**
|
|
160
|
+
Type of the entry point `root` component
|
|
161
|
+
|
|
162
|
+
TEntryPointParams - object that contains all necessary information to execute
|
|
163
|
+
the preloaders (routeParams, query variables)
|
|
164
|
+
|
|
165
|
+
TPreloadedQueries - queries, defined in the root components
|
|
166
|
+
|
|
167
|
+
TPreloadedEntryPoints - nested entry points, defined in the root components
|
|
168
|
+
|
|
169
|
+
TRuntimeProps - the type of additional props that you may pass to the
|
|
170
|
+
component (like `onClick` handler, etc) during runtime. Values for them
|
|
171
|
+
defined during component runtime
|
|
172
|
+
|
|
173
|
+
TExtraProps - a bag of extra props that you may define in `entrypoint` file
|
|
174
|
+
and they will be passed to the EntryPointComponent as `extraProps`
|
|
175
|
+
*/
|
|
178
176
|
export type EntryPointComponent<
|
|
179
177
|
TPreloadedQueries,
|
|
180
178
|
TPreloadedEntryPoints = {},
|
|
181
179
|
TRuntimeProps = {},
|
|
182
180
|
TExtraProps = null,
|
|
183
|
-
TRenders
|
|
181
|
+
+TRenders extends React.Node = React.Node,
|
|
184
182
|
> = component(
|
|
185
183
|
...EntryPointProps<
|
|
186
184
|
TPreloadedQueries,
|
|
@@ -192,13 +190,12 @@ export type EntryPointComponent<
|
|
|
192
190
|
|
|
193
191
|
// Return type of the `getPreloadProps(...)` of the entry point
|
|
194
192
|
export type PreloadProps<
|
|
195
|
-
+TPreloadParams,
|
|
196
193
|
// $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery
|
|
197
|
-
TPreloadedQueries
|
|
198
|
-
TPreloadedEntryPoints
|
|
194
|
+
TPreloadedQueries extends {+[string]: ?PreloadedQuery<any>},
|
|
195
|
+
TPreloadedEntryPoints extends {...},
|
|
199
196
|
TExtraProps = null,
|
|
200
197
|
TEnvironmentProviderOptions = EnvironmentProviderOptions,
|
|
201
|
-
> =
|
|
198
|
+
> = Readonly<{
|
|
202
199
|
entryPoints?: {
|
|
203
200
|
+[K in keyof TPreloadedEntryPoints]?: ?ThinNestedEntryPointParams,
|
|
204
201
|
},
|
|
@@ -207,7 +204,7 @@ export type PreloadProps<
|
|
|
207
204
|
}>;
|
|
208
205
|
|
|
209
206
|
// Return type of `loadEntryPoint(...)`
|
|
210
|
-
export type PreloadedEntryPoint<TEntryPointComponent> =
|
|
207
|
+
export type PreloadedEntryPoint<TEntryPointComponent> = Readonly<{
|
|
211
208
|
dispose: () => void,
|
|
212
209
|
entryPoints: ElementConfig<TEntryPointComponent>['entryPoints'],
|
|
213
210
|
extraProps: ElementConfig<TEntryPointComponent>['extraProps'],
|
|
@@ -218,27 +215,24 @@ export type PreloadedEntryPoint<TEntryPointComponent> = $ReadOnly<{
|
|
|
218
215
|
}>;
|
|
219
216
|
|
|
220
217
|
export type EntryPointElementConfig<
|
|
221
|
-
|
|
222
|
-
+TEntryPoint: InternalEntryPointRepresentation<any, any, any, any, any>,
|
|
223
|
-
> =
|
|
224
|
-
TEntryPoint extends InternalEntryPointRepresentation<
|
|
225
|
-
// $FlowExpectedError[unclear-type] Need any to make it supertype of all InternalEntryPointRepresentation
|
|
226
|
-
any,
|
|
218
|
+
+TEntryPoint extends EntryPoint<
|
|
227
219
|
// $FlowExpectedError[unclear-type] Need any to make it supertype of all InternalEntryPointRepresentation
|
|
228
220
|
any,
|
|
229
221
|
// $FlowExpectedError[unclear-type] Need any to make it supertype of all InternalEntryPointRepresentation
|
|
230
222
|
any,
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
223
|
+
>,
|
|
224
|
+
> =
|
|
225
|
+
TEntryPoint extends EntryPoint<
|
|
226
|
+
infer _EntryPointParams,
|
|
227
|
+
infer EntryPointComponent,
|
|
234
228
|
>
|
|
235
|
-
?
|
|
229
|
+
? ElementConfig<EntryPointComponent>['props']
|
|
236
230
|
: empty;
|
|
237
231
|
|
|
238
232
|
export type ThinQueryParams<
|
|
239
|
-
+TQuery
|
|
233
|
+
+TQuery extends OperationType,
|
|
240
234
|
TEnvironmentProviderOptions,
|
|
241
|
-
> =
|
|
235
|
+
> = Readonly<{
|
|
242
236
|
environmentProviderOptions?: ?TEnvironmentProviderOptions,
|
|
243
237
|
options?: ?PreloadOptions,
|
|
244
238
|
parameters: PreloadableConcreteRequest<TQuery>,
|
|
@@ -261,20 +255,24 @@ export type ExtractQueryTypeHelper<TEnvironmentProviderOptions> = <TQuery>(
|
|
|
261
255
|
// because PreloadedQuery's TQuery parameter is almost phantom, and breaking
|
|
262
256
|
// up the union type would cause us to lose track of TQuery.
|
|
263
257
|
type ExtractThinQueryParams<T, TEnvironmentProviderOptions> = [+t: T] extends [
|
|
264
|
-
// $FlowFixMe[incompatible-type
|
|
265
|
-
+t: PreloadedQuery<infer TQuery>,
|
|
258
|
+
// $FlowFixMe[incompatible-type]
|
|
259
|
+
+t: PreloadedQuery<infer TQuery extends OperationType>,
|
|
266
260
|
]
|
|
267
261
|
? ThinQueryParams<TQuery, TEnvironmentProviderOptions>
|
|
268
262
|
: [+t: T] extends [
|
|
269
263
|
+t: PreloadedQuery<infer TQuery extends OperationType> | void,
|
|
270
264
|
]
|
|
271
265
|
? ThinQueryParams<TQuery, TEnvironmentProviderOptions> | void
|
|
272
|
-
:
|
|
266
|
+
: [+t: T] extends [
|
|
267
|
+
+t: PreloadedQuery<infer TQuery extends OperationType> | null | void,
|
|
268
|
+
]
|
|
269
|
+
? ThinQueryParams<TQuery, TEnvironmentProviderOptions> | null | void
|
|
270
|
+
: empty;
|
|
273
271
|
|
|
274
272
|
export type ExtractQueryTypes<
|
|
275
273
|
TEnvironmentProviderOptions,
|
|
276
274
|
// $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery
|
|
277
|
-
PreloadedQueries
|
|
275
|
+
PreloadedQueries extends {+[string]: ?PreloadedQuery<any>} | void,
|
|
278
276
|
> = {
|
|
279
277
|
[K in keyof PreloadedQueries]: ExtractThinQueryParams<
|
|
280
278
|
PreloadedQueries[K],
|
|
@@ -282,17 +280,13 @@ export type ExtractQueryTypes<
|
|
|
282
280
|
>,
|
|
283
281
|
};
|
|
284
282
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
ElementConfig<TEntryPointComponent>['entryPoints'],
|
|
290
|
-
ElementConfig<TEntryPointComponent>['props'],
|
|
291
|
-
ElementConfig<TEntryPointComponent>['extraProps'],
|
|
292
|
-
>;
|
|
283
|
+
// $FlowFixMe[unclear-type]: we don't care about the props
|
|
284
|
+
export type RootComponentRenders<+C extends component(...any)> =
|
|
285
|
+
// $FlowFixMe[unclear-type]: we don't care about the props
|
|
286
|
+
C extends component(...any) renders infer R extends React.Node ? R : empty;
|
|
293
287
|
|
|
294
288
|
export type PreloadParamsOf<T> = Parameters<T['getPreloadProps']>[0];
|
|
295
289
|
|
|
296
|
-
export type IEnvironmentProvider<TOptions> =
|
|
290
|
+
export type IEnvironmentProvider<TOptions> = Readonly<{
|
|
297
291
|
getEnvironment: (options: ?TOptions) => IEnvironment,
|
|
298
292
|
}>;
|