react-relay 20.1.0 → 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 +9 -10
- package/ReactRelayLocalQueryRenderer.js.flow +11 -3
- package/ReactRelayLoggingContext.js.flow +3 -3
- package/ReactRelayPaginationContainer.js.flow +32 -25
- package/ReactRelayQueryFetcher.js.flow +1 -1
- package/ReactRelayQueryRenderer.js.flow +2 -2
- package/ReactRelayQueryRendererContext.js.flow +2 -2
- package/ReactRelayRefetchContainer.js.flow +18 -15
- 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 +3 -3
- 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 +4 -4
- 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 +16 -14
- 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
|
@@ -46,7 +46,7 @@ const {
|
|
|
46
46
|
const warning = require('warning');
|
|
47
47
|
|
|
48
48
|
export type RefetchFn<
|
|
49
|
-
TQuery
|
|
49
|
+
TQuery extends OperationType,
|
|
50
50
|
TOptions = Options,
|
|
51
51
|
> = RefetchFnExact<TQuery, TOptions>;
|
|
52
52
|
|
|
@@ -56,20 +56,20 @@ export type RefetchFn<
|
|
|
56
56
|
// - Or, expects /a subset/ of the query variables if the provided key type is
|
|
57
57
|
// /non-null/.
|
|
58
58
|
export type RefetchFnDynamic<
|
|
59
|
-
TQuery
|
|
60
|
-
TKey
|
|
59
|
+
TQuery extends OperationType,
|
|
60
|
+
TKey extends ?{+$data?: unknown, ...},
|
|
61
61
|
TOptions = Options,
|
|
62
|
-
> = [TKey] extends [{+$data?:
|
|
62
|
+
> = [TKey] extends [{+$data?: unknown, ...}]
|
|
63
63
|
? RefetchFnInexact<TQuery, TOptions>
|
|
64
64
|
: RefetchFnExact<TQuery, TOptions>;
|
|
65
65
|
|
|
66
66
|
export type ReturnType<
|
|
67
|
-
TQuery
|
|
68
|
-
TKey
|
|
67
|
+
TQuery extends OperationType,
|
|
68
|
+
TKey extends ?{+$data?: unknown, ...},
|
|
69
69
|
TOptions = Options,
|
|
70
70
|
> = {
|
|
71
|
-
fragmentData:
|
|
72
|
-
fragmentRef:
|
|
71
|
+
fragmentData: unknown,
|
|
72
|
+
fragmentRef: unknown,
|
|
73
73
|
refetch: RefetchFnDynamic<TQuery, TKey, TOptions>,
|
|
74
74
|
};
|
|
75
75
|
|
|
@@ -89,14 +89,14 @@ type RefetchFnBase<TVars, TOptions> = (
|
|
|
89
89
|
options?: TOptions,
|
|
90
90
|
) => Disposable;
|
|
91
91
|
|
|
92
|
-
type RefetchFnExact<
|
|
93
|
-
|
|
94
|
-
TOptions,
|
|
95
|
-
>;
|
|
92
|
+
type RefetchFnExact<
|
|
93
|
+
TQuery extends OperationType,
|
|
94
|
+
TOptions = Options,
|
|
95
|
+
> = RefetchFnBase<VariablesOf<TQuery>, TOptions>;
|
|
96
96
|
type RefetchFnInexact<
|
|
97
|
-
TQuery
|
|
97
|
+
TQuery extends OperationType,
|
|
98
98
|
TOptions = Options,
|
|
99
|
-
> = RefetchFnBase
|
|
99
|
+
> = RefetchFnBase<Readonly<Partial<VariablesOf<TQuery>>>, TOptions>;
|
|
100
100
|
|
|
101
101
|
type Action =
|
|
102
102
|
| {
|
|
@@ -154,18 +154,18 @@ function reducer(state: RefetchState, action: Action): RefetchState {
|
|
|
154
154
|
};
|
|
155
155
|
}
|
|
156
156
|
default: {
|
|
157
|
-
|
|
157
|
+
action.type as empty;
|
|
158
158
|
throw new Error('useRefetchableFragmentNode: Unexpected action type');
|
|
159
159
|
}
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
|
|
163
163
|
hook useRefetchableFragmentInternal<
|
|
164
|
-
TQuery
|
|
165
|
-
TKey
|
|
164
|
+
TQuery extends OperationType,
|
|
165
|
+
TKey extends ?{+$data?: unknown, ...},
|
|
166
166
|
>(
|
|
167
167
|
fragmentNode: ReaderFragment,
|
|
168
|
-
parentFragmentRef:
|
|
168
|
+
parentFragmentRef: unknown,
|
|
169
169
|
componentDisplayName: string,
|
|
170
170
|
): ReturnType<TQuery, TKey, InternalOptions> {
|
|
171
171
|
const parentEnvironment = useRelayEnvironment();
|
|
@@ -184,7 +184,7 @@ hook useRefetchableFragmentInternal<
|
|
|
184
184
|
refetchEnvironment: null,
|
|
185
185
|
refetchQuery: null,
|
|
186
186
|
renderPolicy: undefined,
|
|
187
|
-
});
|
|
187
|
+
} as RefetchState);
|
|
188
188
|
const {
|
|
189
189
|
fetchPolicy,
|
|
190
190
|
mirroredEnvironment,
|
|
@@ -206,14 +206,14 @@ hook useRefetchableFragmentInternal<
|
|
|
206
206
|
TQuery['variables'],
|
|
207
207
|
TQuery['response'],
|
|
208
208
|
TQuery['rawResponse'],
|
|
209
|
-
>(
|
|
209
|
+
>(refetchableRequest as $FlowFixMe);
|
|
210
210
|
|
|
211
211
|
let fragmentRef = parentFragmentRef;
|
|
212
212
|
if (shouldReset) {
|
|
213
213
|
dispatch({
|
|
214
|
-
type: 'reset',
|
|
215
214
|
environment,
|
|
216
215
|
fragmentIdentifier,
|
|
216
|
+
type: 'reset',
|
|
217
217
|
});
|
|
218
218
|
disposeQuery();
|
|
219
219
|
} else if (refetchQuery != null && queryRef != null) {
|
|
@@ -268,7 +268,6 @@ hook useRefetchableFragmentInternal<
|
|
|
268
268
|
fetchPolicy,
|
|
269
269
|
renderPolicy,
|
|
270
270
|
{
|
|
271
|
-
error: handleQueryCompleted,
|
|
272
271
|
complete: () => {
|
|
273
272
|
// Validate that the type of the object we got back matches the type
|
|
274
273
|
// of the object already in the store
|
|
@@ -282,6 +281,7 @@ hook useRefetchableFragmentInternal<
|
|
|
282
281
|
}
|
|
283
282
|
handleQueryCompleted();
|
|
284
283
|
},
|
|
284
|
+
error: handleQueryCompleted,
|
|
285
285
|
},
|
|
286
286
|
queryRef.fetchKey,
|
|
287
287
|
profilerContext,
|
|
@@ -350,12 +350,12 @@ hook useRefetchableFragmentInternal<
|
|
|
350
350
|
return {
|
|
351
351
|
fragmentData,
|
|
352
352
|
fragmentRef,
|
|
353
|
-
// $FlowFixMe[incompatible-
|
|
353
|
+
// $FlowFixMe[incompatible-type] RefetchFn not compatible with RefetchFnDynamic
|
|
354
354
|
refetch,
|
|
355
355
|
};
|
|
356
356
|
}
|
|
357
357
|
|
|
358
|
-
hook useRefetchFunction<TQuery
|
|
358
|
+
hook useRefetchFunction<TQuery extends OperationType>(
|
|
359
359
|
componentDisplayName: string,
|
|
360
360
|
dispatch: (
|
|
361
361
|
| {
|
|
@@ -373,13 +373,13 @@ hook useRefetchFunction<TQuery: OperationType>(
|
|
|
373
373
|
},
|
|
374
374
|
) => void,
|
|
375
375
|
disposeQuery: () => void,
|
|
376
|
-
fragmentData:
|
|
376
|
+
fragmentData: unknown,
|
|
377
377
|
fragmentIdentifier: string,
|
|
378
378
|
fragmentNode: ReaderFragment,
|
|
379
|
-
fragmentRefPathInResponse:
|
|
379
|
+
fragmentRefPathInResponse: ReadonlyArray<string | number>,
|
|
380
380
|
identifierInfo: ?RefetchableIdentifierInfo,
|
|
381
381
|
loadQuery: LoaderFn<TQuery>,
|
|
382
|
-
parentFragmentRef:
|
|
382
|
+
parentFragmentRef: unknown,
|
|
383
383
|
refetchableRequest: ConcreteRequest,
|
|
384
384
|
): RefetchFn<TQuery, InternalOptions> {
|
|
385
385
|
const isMountedRef = useIsMountedRef();
|
|
@@ -446,7 +446,7 @@ hook useRefetchFunction<TQuery: OperationType>(
|
|
|
446
446
|
// We fill in any variables not passed by the call to `refetch()` with the
|
|
447
447
|
// variables from the original parent fragment owner.
|
|
448
448
|
const refetchVariables: VariablesOf<TQuery> = {
|
|
449
|
-
...(parentVariables
|
|
449
|
+
...(parentVariables as $FlowFixMe),
|
|
450
450
|
...fragmentVariables,
|
|
451
451
|
...providedRefetchVariables,
|
|
452
452
|
};
|
|
@@ -471,7 +471,7 @@ hook useRefetchFunction<TQuery: OperationType>(
|
|
|
471
471
|
identifierValue,
|
|
472
472
|
);
|
|
473
473
|
}
|
|
474
|
-
(refetchVariables
|
|
474
|
+
(refetchVariables as $FlowFixMe)[
|
|
475
475
|
identifierInfo.identifierQueryVariableName
|
|
476
476
|
] = identifierValue;
|
|
477
477
|
}
|
|
@@ -492,18 +492,18 @@ hook useRefetchFunction<TQuery: OperationType>(
|
|
|
492
492
|
// so that they have been filtered out to include only the
|
|
493
493
|
// variables actually declared in the query.
|
|
494
494
|
loadQuery(refetchQuery.request.variables, {
|
|
495
|
-
fetchPolicy,
|
|
496
495
|
__environment: refetchEnvironment,
|
|
497
496
|
__nameForWarning: 'refetch',
|
|
497
|
+
fetchPolicy,
|
|
498
498
|
});
|
|
499
499
|
|
|
500
500
|
dispatch({
|
|
501
|
-
type: 'refetch',
|
|
502
501
|
fetchPolicy,
|
|
503
502
|
onComplete,
|
|
504
503
|
refetchEnvironment,
|
|
505
504
|
refetchQuery,
|
|
506
505
|
renderPolicy,
|
|
506
|
+
type: 'refetch',
|
|
507
507
|
});
|
|
508
508
|
return {dispose: disposeQuery};
|
|
509
509
|
},
|
|
@@ -521,33 +521,32 @@ hook useRefetchFunction<TQuery: OperationType>(
|
|
|
521
521
|
let debugFunctions;
|
|
522
522
|
if (__DEV__) {
|
|
523
523
|
debugFunctions = {
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
):
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
if (
|
|
533
|
-
fragmentRefPathInResponse.length !== 1 ||
|
|
534
|
-
fragmentRefPathInResponse[0] !== 'node' ||
|
|
535
|
-
id == null
|
|
536
|
-
) {
|
|
537
|
-
return null;
|
|
524
|
+
checkSameIDAfterRefetch(
|
|
525
|
+
previousIDAndTypename: ?DebugIDandTypename,
|
|
526
|
+
refetchedFragmentRef: unknown,
|
|
527
|
+
fragmentNode: ReaderFragment,
|
|
528
|
+
componentDisplayName: string,
|
|
529
|
+
): void {
|
|
530
|
+
if (previousIDAndTypename == null || refetchedFragmentRef == null) {
|
|
531
|
+
return;
|
|
538
532
|
}
|
|
539
|
-
const
|
|
540
|
-
|
|
541
|
-
const
|
|
542
|
-
if (
|
|
543
|
-
|
|
533
|
+
const {ID_KEY} = require('relay-runtime');
|
|
534
|
+
// $FlowExpectedError[incompatible-use]
|
|
535
|
+
const resultID = refetchedFragmentRef[ID_KEY];
|
|
536
|
+
if (resultID != null && resultID !== previousIDAndTypename.id) {
|
|
537
|
+
warning(
|
|
538
|
+
false,
|
|
539
|
+
'Relay: Call to `refetch` returned a different id, expected ' +
|
|
540
|
+
'`%s`, got `%s`, on `%s` in `%s`. ' +
|
|
541
|
+
'Please make sure the server correctly implements ' +
|
|
542
|
+
'unique id requirement.',
|
|
543
|
+
resultID,
|
|
544
|
+
previousIDAndTypename.id,
|
|
545
|
+
fragmentNode.name,
|
|
546
|
+
componentDisplayName,
|
|
547
|
+
);
|
|
544
548
|
}
|
|
545
|
-
return {
|
|
546
|
-
id,
|
|
547
|
-
typename,
|
|
548
|
-
};
|
|
549
549
|
},
|
|
550
|
-
|
|
551
550
|
checkSameTypeAfterRefetch(
|
|
552
551
|
previousIDAndType: ?DebugIDandTypename,
|
|
553
552
|
environment: IEnvironment,
|
|
@@ -575,32 +574,31 @@ if (__DEV__) {
|
|
|
575
574
|
);
|
|
576
575
|
}
|
|
577
576
|
},
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
577
|
+
getInitialIDAndType(
|
|
578
|
+
memoRefetchVariables: ?Variables,
|
|
579
|
+
fragmentRefPathInResponse: ReadonlyArray<string | number>,
|
|
580
|
+
identifierQueryVariableName: ?string,
|
|
581
|
+
environment: IEnvironment,
|
|
582
|
+
): ?DebugIDandTypename {
|
|
583
|
+
const {Record} = require('relay-runtime');
|
|
584
|
+
const id = memoRefetchVariables?.[identifierQueryVariableName ?? 'id'];
|
|
585
|
+
if (
|
|
586
|
+
fragmentRefPathInResponse.length !== 1 ||
|
|
587
|
+
fragmentRefPathInResponse[0] !== 'node' ||
|
|
588
|
+
id == null
|
|
589
|
+
) {
|
|
590
|
+
return null;
|
|
587
591
|
}
|
|
588
|
-
const
|
|
589
|
-
|
|
590
|
-
const
|
|
591
|
-
if (
|
|
592
|
-
|
|
593
|
-
false,
|
|
594
|
-
'Relay: Call to `refetch` returned a different id, expected ' +
|
|
595
|
-
'`%s`, got `%s`, on `%s` in `%s`. ' +
|
|
596
|
-
'Please make sure the server correctly implements ' +
|
|
597
|
-
'unique id requirement.',
|
|
598
|
-
resultID,
|
|
599
|
-
previousIDAndTypename.id,
|
|
600
|
-
fragmentNode.name,
|
|
601
|
-
componentDisplayName,
|
|
602
|
-
);
|
|
592
|
+
const recordSource = environment.getStore().getSource();
|
|
593
|
+
const record = recordSource.get(id);
|
|
594
|
+
const typename = record == null ? null : Record.getType(record);
|
|
595
|
+
if (typename == null) {
|
|
596
|
+
return null;
|
|
603
597
|
}
|
|
598
|
+
return {
|
|
599
|
+
id,
|
|
600
|
+
typename,
|
|
601
|
+
};
|
|
604
602
|
},
|
|
605
603
|
};
|
|
606
604
|
}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
const ReactRelayLoggingContext = require('./../ReactRelayLoggingContext');
|
|
15
15
|
const {useContext} = require('react');
|
|
16
16
|
|
|
17
|
-
hook useRelayLoggingContext():
|
|
17
|
+
hook useRelayLoggingContext(): unknown | void {
|
|
18
18
|
return useContext(ReactRelayLoggingContext);
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -26,7 +26,7 @@ const {useEffect, useRef} = require('react');
|
|
|
26
26
|
* The subscription will automatically be disposed on unmount
|
|
27
27
|
*/
|
|
28
28
|
hook useSubscribeToInvalidationState(
|
|
29
|
-
dataIDs:
|
|
29
|
+
dataIDs: ReadonlyArray<DataID>,
|
|
30
30
|
callback: () => void,
|
|
31
31
|
): Disposable {
|
|
32
32
|
const environment = useRelayEnvironment();
|
|
@@ -41,7 +41,7 @@ hook useSubscription<TVariables, TData, TRawResponse>(
|
|
|
41
41
|
TVariables,
|
|
42
42
|
TData,
|
|
43
43
|
TRawResponse,
|
|
44
|
-
> = requestSubscriptionFn ?? (requestSubscription
|
|
44
|
+
> = requestSubscriptionFn ?? (requestSubscription as $FlowFixMe);
|
|
45
45
|
const environment = useRelayEnvironment();
|
|
46
46
|
useEffect(() => {
|
|
47
47
|
// $FlowFixMe[method-unbinding] added when improving typing for this parameters
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relay v21.0.0
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
module.exports = require('./lib/rsc-client_EXPERIMENTAL.js');
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall relay
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use client';
|
|
13
|
+
'use strict';
|
|
14
|
+
|
|
15
|
+
import type {PreloadedQueryRef} from './relay-hooks/rsc/serverPreloadQuery';
|
|
16
|
+
|
|
17
|
+
const useQueryFromServer = require('./relay-hooks/rsc/useQueryFromServer');
|
|
18
|
+
|
|
19
|
+
export type {PreloadedQueryRef};
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
useQueryFromServer,
|
|
23
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Relay v21.0.0
|
|
3
|
+
*
|
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
5
|
+
*
|
|
6
|
+
* This source code is licensed under the MIT license found in the
|
|
7
|
+
* LICENSE file in the root directory of this source tree.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
module.exports = require('./lib/rsc_EXPERIMENTAL.js');
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
* @flow strict-local
|
|
8
|
+
* @format
|
|
9
|
+
* @oncall relay
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
'use strict';
|
|
13
|
+
|
|
14
|
+
import type {PreloadedQueryRef} from './relay-hooks/rsc/serverPreloadQuery';
|
|
15
|
+
import type {
|
|
16
|
+
Fragment,
|
|
17
|
+
FragmentType,
|
|
18
|
+
IEnvironment,
|
|
19
|
+
Query,
|
|
20
|
+
Variables,
|
|
21
|
+
} from 'relay-runtime';
|
|
22
|
+
|
|
23
|
+
const serverFetchQueryImpl = require('./relay-hooks/rsc/serverFetchQuery');
|
|
24
|
+
const serverPreloadQueryImpl = require('./relay-hooks/rsc/serverPreloadQuery');
|
|
25
|
+
const serverReadFragmentImpl = require('./relay-hooks/rsc/serverReadFragment');
|
|
26
|
+
const invariant = require('invariant');
|
|
27
|
+
const React = require('react');
|
|
28
|
+
|
|
29
|
+
export type {PreloadedQueryRef};
|
|
30
|
+
|
|
31
|
+
type HasSpread<TFragmentType> = {+$fragmentSpreads: TFragmentType, ...};
|
|
32
|
+
|
|
33
|
+
export type ServerEnvironment = {
|
|
34
|
+
+getEnvironment: () => IEnvironment,
|
|
35
|
+
+serverFetchQuery: <TVariables extends Variables, TData>(
|
|
36
|
+
query: Query<TVariables, TData>,
|
|
37
|
+
variables: TVariables,
|
|
38
|
+
) => Promise<TData>,
|
|
39
|
+
+serverPreloadQuery: <TVariables extends Variables, TData>(
|
|
40
|
+
query: Query<TVariables, TData>,
|
|
41
|
+
variables: TVariables,
|
|
42
|
+
) => PreloadedQueryRef<TVariables, TData>,
|
|
43
|
+
+serverReadFragment: <TFragmentType extends FragmentType, TData>(
|
|
44
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
45
|
+
fragmentRef:
|
|
46
|
+
| HasSpread<TFragmentType>
|
|
47
|
+
| ReadonlyArray<HasSpread<TFragmentType>>,
|
|
48
|
+
) => Promise<TData>,
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
function createServerEnvironment(
|
|
52
|
+
create: () => IEnvironment,
|
|
53
|
+
): ServerEnvironment {
|
|
54
|
+
// $FlowFixMe[missing-export] React.cache is available in React 19+
|
|
55
|
+
const cache = React.cache;
|
|
56
|
+
invariant(typeof cache === 'function', 'Relay RSC APIs require React 19+');
|
|
57
|
+
const getEnvironment = cache(create);
|
|
58
|
+
|
|
59
|
+
async function serverFetchQuery<TVariables extends Variables, TData>(
|
|
60
|
+
query: Query<TVariables, TData>,
|
|
61
|
+
variables: TVariables,
|
|
62
|
+
): Promise<TData> {
|
|
63
|
+
return serverFetchQueryImpl(getEnvironment(), query, variables);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function serverPreloadQuery<TVariables extends Variables, TData>(
|
|
67
|
+
query: Query<TVariables, TData>,
|
|
68
|
+
variables: TVariables,
|
|
69
|
+
): PreloadedQueryRef<TVariables, TData> {
|
|
70
|
+
return serverPreloadQueryImpl(getEnvironment(), query, variables);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async function serverReadFragment<TFragmentType extends FragmentType, TData>(
|
|
74
|
+
fragment: Fragment<TFragmentType, TData>,
|
|
75
|
+
fragmentRef:
|
|
76
|
+
| HasSpread<TFragmentType>
|
|
77
|
+
| ReadonlyArray<HasSpread<TFragmentType>>,
|
|
78
|
+
): Promise<TData> {
|
|
79
|
+
return serverReadFragmentImpl(getEnvironment(), fragment, fragmentRef);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
return {
|
|
83
|
+
getEnvironment,
|
|
84
|
+
serverFetchQuery,
|
|
85
|
+
serverPreloadQuery,
|
|
86
|
+
serverReadFragment,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
module.exports = {createServerEnvironment};
|