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.
Files changed (129) hide show
  1. package/ReactRelayContext.js +1 -1
  2. package/ReactRelayContext.js.flow +2 -2
  3. package/ReactRelayFragmentContainer.js.flow +8 -9
  4. package/ReactRelayLocalQueryRenderer.js.flow +11 -3
  5. package/ReactRelayLoggingContext.js.flow +3 -3
  6. package/ReactRelayPaginationContainer.js.flow +31 -24
  7. package/ReactRelayQueryFetcher.js.flow +1 -1
  8. package/ReactRelayQueryRenderer.js.flow +2 -2
  9. package/ReactRelayQueryRendererContext.js.flow +2 -2
  10. package/ReactRelayRefetchContainer.js.flow +17 -14
  11. package/ReactRelayTestMocker.js.flow +10 -10
  12. package/ReactRelayTypes.js.flow +18 -20
  13. package/RelayContext.js.flow +3 -3
  14. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +11 -11
  15. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +5 -5
  16. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +5 -5
  17. package/__flowtests__/RelayModern-flowtest.js.flow +24 -27
  18. package/__flowtests__/RelayModernFlowtest_users.graphql.js.flow +1 -1
  19. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +3 -4
  20. package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +3 -4
  21. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +9 -10
  22. package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +4 -5
  23. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +9 -10
  24. package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +4 -5
  25. package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +3 -4
  26. package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +3 -4
  27. package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +3 -4
  28. package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +5 -6
  29. package/buildReactRelayContainer.js.flow +4 -4
  30. package/getRootVariablesForFragments.js.flow +1 -1
  31. package/hooks.js +1 -1
  32. package/hooks.js.flow +23 -8
  33. package/index.js +1 -1
  34. package/index.js.flow +40 -14
  35. package/isRelayEnvironment.js.flow +1 -1
  36. package/jest-react/internalAct.js.flow +1 -1
  37. package/legacy.js +1 -1
  38. package/legacy.js.flow +32 -13
  39. package/lib/ReactRelayFragmentContainer.js +1 -1
  40. package/lib/ReactRelayPaginationContainer.js +8 -8
  41. package/lib/ReactRelayRefetchContainer.js +8 -8
  42. package/lib/ReactRelayTestMocker.js +5 -5
  43. package/lib/hooks.js +18 -8
  44. package/lib/index.js +30 -14
  45. package/lib/legacy.js +26 -13
  46. package/lib/relay-hooks/legacy/useBlockingPaginationFragment.js +5 -5
  47. package/lib/relay-hooks/legacy/useRefetchableFragmentNode.js +34 -34
  48. package/lib/relay-hooks/loadEntryPoint.js +2 -2
  49. package/lib/relay-hooks/loadQuery.js +14 -14
  50. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +10 -10
  51. package/lib/relay-hooks/readFragmentInternal.js +6 -6
  52. package/lib/relay-hooks/rsc/serverFetchQuery.js +20 -0
  53. package/lib/relay-hooks/rsc/serverPreloadQuery.js +31 -0
  54. package/lib/relay-hooks/rsc/serverReadFragment.js +15 -0
  55. package/lib/relay-hooks/rsc/useQueryFromServer.js +62 -0
  56. package/lib/relay-hooks/useFragmentInternal_CURRENT.js +49 -25
  57. package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +81 -44
  58. package/lib/relay-hooks/useLazyLoadQueryNode.js +32 -19
  59. package/lib/relay-hooks/useMutation.js +6 -14
  60. package/lib/relay-hooks/useMutationAction_EXPERIMENTAL.js +26 -0
  61. package/lib/relay-hooks/usePreloadedQuery.js +52 -47
  62. package/lib/relay-hooks/useQueryLoader.js +2 -2
  63. package/lib/relay-hooks/useQueryLoader_EXPERIMENTAL.js +2 -2
  64. package/lib/relay-hooks/useRefetchableFragmentInternal.js +31 -31
  65. package/lib/rsc-client_EXPERIMENTAL.js +7 -0
  66. package/lib/rsc_EXPERIMENTAL.js +43 -0
  67. package/multi-actor/ActorChange.js.flow +1 -1
  68. package/package.json +3 -2
  69. package/relay-hooks/EntryPointContainer.react.js.flow +6 -6
  70. package/relay-hooks/EntryPointTypes.flow.js.flow +61 -67
  71. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +23 -21
  72. package/relay-hooks/MatchContainer.js.flow +12 -6
  73. package/relay-hooks/NestedRelayEntryPointBuilderUtils.js.flow +3 -9
  74. package/relay-hooks/QueryResource.js.flow +6 -6
  75. package/relay-hooks/RelayEnvironmentProvider.js.flow +2 -2
  76. package/relay-hooks/__flowtests__/EntryPointTypes/EntryPointElementConfig-flowtest.js.flow +6 -6
  77. package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +48 -1
  78. package/relay-hooks/__flowtests__/EntryPointTypes/NestedEntrypoints-flowtest.js.flow +9 -9
  79. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +3 -4
  80. package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +5 -6
  81. package/relay-hooks/__flowtests__/useBlockingPaginationFragment-flowtest.js.flow +27 -32
  82. package/relay-hooks/__flowtests__/useFragment-flowtest.js.flow +25 -25
  83. package/relay-hooks/__flowtests__/usePaginationFragment-flowtest.js.flow +26 -32
  84. package/relay-hooks/__flowtests__/useRefetchableFragment-flowtest.js.flow +23 -30
  85. package/relay-hooks/__flowtests__/utils.js.flow +4 -4
  86. package/relay-hooks/getConnectionState.js.flow +2 -2
  87. package/relay-hooks/legacy/FragmentResource.js.flow +13 -13
  88. package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +24 -25
  89. package/relay-hooks/legacy/useFragmentNode.js.flow +4 -4
  90. package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +79 -81
  91. package/relay-hooks/loadEntryPoint.js.flow +15 -13
  92. package/relay-hooks/loadQuery.js.flow +18 -18
  93. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +16 -13
  94. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +7 -7
  95. package/relay-hooks/readFragmentInternal.js.flow +9 -9
  96. package/relay-hooks/rsc/serverFetchQuery.js.flow +31 -0
  97. package/relay-hooks/rsc/serverPreloadQuery.js.flow +69 -0
  98. package/relay-hooks/rsc/serverReadFragment.js.flow +33 -0
  99. package/relay-hooks/rsc/useQueryFromServer.js.flow +135 -0
  100. package/relay-hooks/useClientQuery.js.flow +2 -2
  101. package/relay-hooks/useEntryPointLoader.js.flow +11 -11
  102. package/relay-hooks/useFragment.js.flow +7 -7
  103. package/relay-hooks/useFragmentInternal.js.flow +1 -1
  104. package/relay-hooks/useFragmentInternal_CURRENT.js.flow +54 -22
  105. package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +95 -46
  106. package/relay-hooks/useIsOperationNodeActive.js.flow +1 -1
  107. package/relay-hooks/useIsParentQueryActive.js.flow +1 -1
  108. package/relay-hooks/useLazyLoadQuery.js.flow +10 -3
  109. package/relay-hooks/useLazyLoadQueryNode.js.flow +67 -28
  110. package/relay-hooks/useLoadMoreFunction.js.flow +7 -6
  111. package/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js.flow +5 -5
  112. package/relay-hooks/useMemoVariables.js.flow +1 -1
  113. package/relay-hooks/useMutation.js.flow +8 -16
  114. package/relay-hooks/useMutationAction_EXPERIMENTAL.js.flow +68 -0
  115. package/relay-hooks/usePaginationFragment.js.flow +15 -11
  116. package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +19 -18
  117. package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +19 -18
  118. package/relay-hooks/usePreloadedQuery.js.flow +119 -85
  119. package/relay-hooks/useQueryLoader.js.flow +27 -23
  120. package/relay-hooks/useQueryLoader_EXPERIMENTAL.js.flow +10 -10
  121. package/relay-hooks/useRefetchableFragment.js.flow +16 -11
  122. package/relay-hooks/useRefetchableFragmentInternal.js.flow +77 -79
  123. package/relay-hooks/useRelayLoggingContext.js.flow +1 -1
  124. package/relay-hooks/useSubscribeToInvalidationState.js.flow +1 -1
  125. package/relay-hooks/useSubscription.js.flow +1 -1
  126. package/rsc-client_EXPERIMENTAL.js +10 -0
  127. package/rsc-client_EXPERIMENTAL.js.flow +23 -0
  128. package/rsc_EXPERIMENTAL.js +10 -0
  129. 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: OperationType,
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: OperationType,
60
- TKey: ?{+$data?: mixed, ...},
59
+ TQuery extends OperationType,
60
+ TKey extends ?{+$data?: unknown, ...},
61
61
  TOptions = Options,
62
- > = [TKey] extends [{+$data?: mixed, ...}]
62
+ > = [TKey] extends [{+$data?: unknown, ...}]
63
63
  ? RefetchFnInexact<TQuery, TOptions>
64
64
  : RefetchFnExact<TQuery, TOptions>;
65
65
 
66
66
  export type ReturnType<
67
- TQuery: OperationType,
68
- TKey: ?{+$data?: mixed, ...},
67
+ TQuery extends OperationType,
68
+ TKey extends ?{+$data?: unknown, ...},
69
69
  TOptions = Options,
70
70
  > = {
71
- fragmentData: mixed,
72
- fragmentRef: mixed,
71
+ fragmentData: unknown,
72
+ fragmentRef: unknown,
73
73
  refetch: RefetchFnDynamic<TQuery, TKey, TOptions>,
74
74
  disableStoreUpdates: () => void,
75
75
  enableStoreUpdates: () => void,
@@ -91,12 +91,12 @@ type RefetchFnBase<TVars, TOptions> = (
91
91
  options?: TOptions,
92
92
  ) => Disposable;
93
93
 
94
- type RefetchFnExact<TQuery: OperationType, TOptions = Options> = RefetchFnBase<
95
- VariablesOf<TQuery>,
96
- TOptions,
97
- >;
94
+ type RefetchFnExact<
95
+ TQuery extends OperationType,
96
+ TOptions = Options,
97
+ > = RefetchFnBase<VariablesOf<TQuery>, TOptions>;
98
98
  type RefetchFnInexact<
99
- TQuery: OperationType,
99
+ TQuery extends OperationType,
100
100
  TOptions = Options,
101
101
  > = RefetchFnBase<Partial<VariablesOf<TQuery>>, TOptions>;
102
102
 
@@ -156,18 +156,18 @@ function reducer(state: RefetchState, action: Action): RefetchState {
156
156
  };
157
157
  }
158
158
  default: {
159
- (action.type: empty);
159
+ action.type as empty;
160
160
  throw new Error('useRefetchableFragmentNode: Unexpected action type');
161
161
  }
162
162
  }
163
163
  }
164
164
 
165
165
  hook useRefetchableFragmentNode<
166
- TQuery: OperationType,
167
- TKey: ?{+$data?: mixed, ...},
166
+ TQuery extends OperationType,
167
+ TKey extends ?{+$data?: unknown, ...},
168
168
  >(
169
169
  fragmentNode: ReaderFragment,
170
- parentFragmentRef: mixed,
170
+ parentFragmentRef: unknown,
171
171
  componentDisplayName: string,
172
172
  ): ReturnType<TQuery, TKey, InternalOptions> {
173
173
  const parentEnvironment = useRelayEnvironment();
@@ -188,7 +188,7 @@ hook useRefetchableFragmentNode<
188
188
  refetchEnvironment: null,
189
189
  refetchQuery: null,
190
190
  renderPolicy: undefined,
191
- });
191
+ } as RefetchState);
192
192
  const {
193
193
  fetchPolicy,
194
194
  mirroredEnvironment,
@@ -211,7 +211,7 @@ hook useRefetchableFragmentNode<
211
211
  TQuery['variables'],
212
212
  TQuery['response'],
213
213
  TQuery['rawResponse'],
214
- >((refetchableRequest: $FlowFixMe));
214
+ >(refetchableRequest as $FlowFixMe);
215
215
 
216
216
  let fragmentRef = parentFragmentRef;
217
217
 
@@ -222,9 +222,9 @@ hook useRefetchableFragmentNode<
222
222
 
223
223
  if (shouldReset) {
224
224
  dispatch({
225
- type: 'reset',
226
225
  environment,
227
226
  fragmentIdentifier,
227
+ type: 'reset',
228
228
  });
229
229
  disposeQuery();
230
230
  } else if (refetchQuery != null && queryRef != null) {
@@ -279,7 +279,6 @@ hook useRefetchableFragmentNode<
279
279
  fetchPolicy,
280
280
  renderPolicy,
281
281
  {
282
- error: handleQueryCompleted,
283
282
  complete: () => {
284
283
  // Validate that the type of the object we got back matches the type
285
284
  // of the object already in the store
@@ -293,6 +292,7 @@ hook useRefetchableFragmentNode<
293
292
  }
294
293
  handleQueryCompleted();
295
294
  },
295
+ error: handleQueryCompleted,
296
296
  },
297
297
  queryRef.fetchKey,
298
298
  profilerContext,
@@ -342,7 +342,7 @@ hook useRefetchableFragmentNode<
342
342
  data: fragmentData,
343
343
  disableStoreUpdates,
344
344
  enableStoreUpdates,
345
- } = useFragmentNode<mixed>(fragmentNode, fragmentRef, componentDisplayName);
345
+ } = useFragmentNode<unknown>(fragmentNode, fragmentRef, componentDisplayName);
346
346
 
347
347
  const refetch = useRefetchFunction<TQuery>(
348
348
  componentDisplayName,
@@ -358,16 +358,16 @@ hook useRefetchableFragmentNode<
358
358
  refetchableRequest,
359
359
  );
360
360
  return {
361
+ disableStoreUpdates,
362
+ enableStoreUpdates,
361
363
  fragmentData,
362
364
  fragmentRef,
363
- // $FlowFixMe[incompatible-return] RefetchFn not compatible with RefetchFnDynamic
365
+ // $FlowFixMe[incompatible-type] RefetchFn not compatible with RefetchFnDynamic
364
366
  refetch,
365
- disableStoreUpdates,
366
- enableStoreUpdates,
367
367
  };
368
368
  }
369
369
 
370
- hook useRefetchFunction<TQuery: OperationType>(
370
+ hook useRefetchFunction<TQuery extends OperationType>(
371
371
  componentDisplayName: string,
372
372
  dispatch: (
373
373
  | {
@@ -385,13 +385,13 @@ hook useRefetchFunction<TQuery: OperationType>(
385
385
  },
386
386
  ) => void,
387
387
  disposeQuery: () => void,
388
- fragmentData: mixed,
388
+ fragmentData: unknown,
389
389
  fragmentIdentifier: string,
390
390
  fragmentNode: ReaderFragment,
391
- fragmentRefPathInResponse: $ReadOnlyArray<string | number>,
391
+ fragmentRefPathInResponse: ReadonlyArray<string | number>,
392
392
  identifierInfo: ?RefetchableIdentifierInfo,
393
393
  loadQuery: LoaderFn<TQuery>,
394
- parentFragmentRef: mixed,
394
+ parentFragmentRef: unknown,
395
395
  refetchableRequest: ConcreteRequest,
396
396
  ): RefetchFn<TQuery, InternalOptions> {
397
397
  const isMountedRef = useIsMountedRef();
@@ -458,7 +458,7 @@ hook useRefetchFunction<TQuery: OperationType>(
458
458
  // We fill in any variables not passed by the call to `refetch()` with the
459
459
  // variables from the original parent fragment owner.
460
460
  const refetchVariables: VariablesOf<TQuery> = {
461
- ...(parentVariables: $FlowFixMe),
461
+ ...(parentVariables as $FlowFixMe),
462
462
  ...fragmentVariables,
463
463
  ...providedRefetchVariables,
464
464
  };
@@ -483,7 +483,7 @@ hook useRefetchFunction<TQuery: OperationType>(
483
483
  identifierValue,
484
484
  );
485
485
  }
486
- (refetchVariables: $FlowFixMe)[
486
+ (refetchVariables as $FlowFixMe)[
487
487
  identifierInfo.identifierQueryVariableName
488
488
  ] = identifierValue;
489
489
  }
@@ -502,18 +502,18 @@ hook useRefetchFunction<TQuery: OperationType>(
502
502
  // so that they have been filtered out to include only the
503
503
  // variables actually declared in the query.
504
504
  loadQuery(refetchQuery.request.variables, {
505
- fetchPolicy,
506
505
  __environment: refetchEnvironment,
507
506
  __nameForWarning: 'refetch',
507
+ fetchPolicy,
508
508
  });
509
509
 
510
510
  dispatch({
511
- type: 'refetch',
512
511
  fetchPolicy,
513
512
  onComplete,
514
513
  refetchEnvironment,
515
514
  refetchQuery,
516
515
  renderPolicy,
516
+ type: 'refetch',
517
517
  });
518
518
  return {dispose: disposeQuery};
519
519
  },
@@ -531,33 +531,32 @@ hook useRefetchFunction<TQuery: OperationType>(
531
531
  let debugFunctions;
532
532
  if (__DEV__) {
533
533
  debugFunctions = {
534
- getInitialIDAndType(
535
- memoRefetchVariables: ?Variables,
536
- fragmentRefPathInResponse: $ReadOnlyArray<string | number>,
537
- identifierQueryVariableName: ?string,
538
- environment: IEnvironment,
539
- ): ?DebugIDandTypename {
540
- const {Record} = require('relay-runtime');
541
- const id = memoRefetchVariables?.[identifierQueryVariableName ?? 'id'];
542
- if (
543
- fragmentRefPathInResponse.length !== 1 ||
544
- fragmentRefPathInResponse[0] !== 'node' ||
545
- id == null
546
- ) {
547
- return null;
534
+ checkSameIDAfterRefetch(
535
+ previousIDAndTypename: ?DebugIDandTypename,
536
+ refetchedFragmentRef: unknown,
537
+ fragmentNode: ReaderFragment,
538
+ componentDisplayName: string,
539
+ ): void {
540
+ if (previousIDAndTypename == null || refetchedFragmentRef == null) {
541
+ return;
548
542
  }
549
- const recordSource = environment.getStore().getSource();
550
- const record = recordSource.get(id);
551
- const typename = record == null ? null : Record.getType(record);
552
- if (typename == null) {
553
- return null;
543
+ const {ID_KEY} = require('relay-runtime');
544
+ // $FlowExpectedError[incompatible-use]
545
+ const resultID = refetchedFragmentRef[ID_KEY];
546
+ if (resultID != null && resultID !== previousIDAndTypename.id) {
547
+ warning(
548
+ false,
549
+ 'Relay: Call to `refetch` returned a different id, expected ' +
550
+ '`%s`, got `%s`, on `%s` in `%s`. ' +
551
+ 'Please make sure the server correctly implements ' +
552
+ 'unique id requirement.',
553
+ resultID,
554
+ previousIDAndTypename.id,
555
+ fragmentNode.name,
556
+ componentDisplayName,
557
+ );
554
558
  }
555
- return {
556
- id,
557
- typename,
558
- };
559
559
  },
560
-
561
560
  checkSameTypeAfterRefetch(
562
561
  previousIDAndType: ?DebugIDandTypename,
563
562
  environment: IEnvironment,
@@ -585,32 +584,31 @@ if (__DEV__) {
585
584
  );
586
585
  }
587
586
  },
588
-
589
- checkSameIDAfterRefetch(
590
- previousIDAndTypename: ?DebugIDandTypename,
591
- refetchedFragmentRef: mixed,
592
- fragmentNode: ReaderFragment,
593
- componentDisplayName: string,
594
- ): void {
595
- if (previousIDAndTypename == null || refetchedFragmentRef == null) {
596
- return;
587
+ getInitialIDAndType(
588
+ memoRefetchVariables: ?Variables,
589
+ fragmentRefPathInResponse: ReadonlyArray<string | number>,
590
+ identifierQueryVariableName: ?string,
591
+ environment: IEnvironment,
592
+ ): ?DebugIDandTypename {
593
+ const {Record} = require('relay-runtime');
594
+ const id = memoRefetchVariables?.[identifierQueryVariableName ?? 'id'];
595
+ if (
596
+ fragmentRefPathInResponse.length !== 1 ||
597
+ fragmentRefPathInResponse[0] !== 'node' ||
598
+ id == null
599
+ ) {
600
+ return null;
597
601
  }
598
- const {ID_KEY} = require('relay-runtime');
599
- // $FlowExpectedError[incompatible-use]
600
- const resultID = refetchedFragmentRef[ID_KEY];
601
- if (resultID != null && resultID !== previousIDAndTypename.id) {
602
- warning(
603
- false,
604
- 'Relay: Call to `refetch` returned a different id, expected ' +
605
- '`%s`, got `%s`, on `%s` in `%s`. ' +
606
- 'Please make sure the server correctly implements ' +
607
- 'unique id requirement.',
608
- resultID,
609
- previousIDAndTypename.id,
610
- fragmentNode.name,
611
- componentDisplayName,
612
- );
602
+ const recordSource = environment.getStore().getSource();
603
+ const record = recordSource.get(id);
604
+ const typename = record == null ? null : Record.getType(record);
605
+ if (typename == null) {
606
+ return null;
613
607
  }
608
+ return {
609
+ id,
610
+ typename,
611
+ };
614
612
  },
615
613
  };
616
614
  }
@@ -23,19 +23,19 @@ import type {
23
23
  const {loadQuery} = require('./loadQuery');
24
24
 
25
25
  function loadEntryPoint<
26
- TEntryPointParams: {...},
26
+ TEntryPointParams extends {...},
27
27
  // $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery
28
- TPreloadedQueries: {+[string]: PreloadedQuery<any>},
29
- TPreloadedEntryPoints: {...},
30
- TRuntimeProps: {...},
28
+ TPreloadedQueries extends {+[string]: PreloadedQuery<any>},
29
+ TPreloadedEntryPoints extends {...},
30
+ TRuntimeProps extends {...},
31
31
  TExtraProps,
32
- TEntryPointComponent: EntryPointComponent<
32
+ TEntryPointComponent extends EntryPointComponent<
33
33
  TPreloadedQueries,
34
34
  TPreloadedEntryPoints,
35
35
  TRuntimeProps,
36
36
  TExtraProps,
37
37
  >,
38
- TEntryPoint: EntryPoint<TEntryPointParams, TEntryPointComponent>,
38
+ TEntryPoint extends EntryPoint<TEntryPointParams, TEntryPointComponent>,
39
39
  >(
40
40
  environmentProvider: IEnvironmentProvider<EnvironmentProviderOptions>,
41
41
  entryPoint: TEntryPoint,
@@ -78,9 +78,9 @@ function loadEntryPoint<
78
78
  parameters,
79
79
  variables,
80
80
  {
81
+ __nameForWarning: 'loadEntryPoint',
81
82
  fetchPolicy: options?.fetchPolicy,
82
83
  networkCacheConfig: options?.networkCacheConfig,
83
- __nameForWarning: 'loadEntryPoint',
84
84
  },
85
85
  environmentProviderOptions,
86
86
  );
@@ -101,8 +101,8 @@ function loadEntryPoint<
101
101
  {},
102
102
  {...},
103
103
  {...},
104
- mixed,
105
- EntryPointComponent<{}, {...}, {...}, mixed>,
104
+ unknown,
105
+ EntryPointComponent<{}, {...}, {...}, unknown>,
106
106
  _,
107
107
  >(environmentProvider, nestedEntryPoint, nestedParams);
108
108
  });
@@ -130,7 +130,8 @@ function loadEntryPoint<
130
130
  }
131
131
  isDisposed = true;
132
132
  },
133
- entryPoints: (preloadedEntryPoints: TPreloadedEntryPoints),
133
+ // $FlowFixMe[incompatible-type]
134
+ entryPoints: preloadedEntryPoints as TPreloadedEntryPoints,
134
135
  extraProps: extraProps ?? null,
135
136
  getComponent: () => {
136
137
  const componentModule = entryPoint.root.getModuleIfRequired();
@@ -148,14 +149,15 @@ function loadEntryPoint<
148
149
  componentModule.default != null
149
150
  ? componentModule.default
150
151
  : componentModule;
151
- // $FlowFixMe[incompatible-cast] - trust me Flow, its entryPoint component
152
- return (component: TEntryPointComponent);
152
+ // $FlowFixMe[incompatible-type] - trust me Flow, its entryPoint component
153
+ return component as TEntryPointComponent;
153
154
  },
154
155
  // $FlowFixMe[unsafe-getters-setters] - this has no side effects
155
156
  get isDisposed() {
156
157
  return isDisposed;
157
158
  },
158
- queries: (preloadedQueries: TPreloadedQueries),
159
+ // $FlowFixMe[incompatible-type]
160
+ queries: preloadedQueries as TPreloadedQueries,
159
161
  rootModuleID: entryPoint.root.getModuleId(),
160
162
  };
161
163
  }
@@ -48,7 +48,7 @@ export type QueryType<T> =
48
48
  ? {
49
49
  variables: V,
50
50
  response: D,
51
- rawResponse?: $NonMaybeType<RR>,
51
+ rawResponse?: NonNullable<RR>,
52
52
  }
53
53
  : [+t: T] extends [+t: PreloadableConcreteRequest<infer V>]
54
54
  ? V
@@ -66,7 +66,7 @@ declare function loadQuery<
66
66
  ): PreloadedQueryInner<QueryType<T>, TEnvironmentProviderOptions>;
67
67
 
68
68
  function loadQuery<
69
- TQuery: OperationType,
69
+ TQuery extends OperationType,
70
70
  TEnvironmentProviderOptions = EnvironmentProviderOptions,
71
71
  >(
72
72
  environment: IEnvironment,
@@ -175,6 +175,9 @@ function loadQuery<
175
175
  });
176
176
 
177
177
  const {unsubscribe} = observable.subscribe({
178
+ complete() {
179
+ subject.complete();
180
+ },
178
181
  error(err) {
179
182
  networkError = err;
180
183
  subject.error(err);
@@ -182,9 +185,6 @@ function loadQuery<
182
185
  next(data) {
183
186
  subject.next(data);
184
187
  },
185
- complete() {
186
- subject.complete();
187
- },
188
188
  });
189
189
  unsubscribeFromNetworkRequest = unsubscribe;
190
190
  return Observable.create(sink => {
@@ -230,15 +230,15 @@ function loadQuery<
230
230
  operation.request.identifier,
231
231
  fetchFn,
232
232
  ).subscribe({
233
+ complete() {
234
+ executionSubject.complete();
235
+ },
233
236
  error(err) {
234
237
  executionSubject.error(err);
235
238
  },
236
239
  next(data) {
237
240
  executionSubject.next(data);
238
241
  },
239
- complete() {
240
- executionSubject.complete();
241
- },
242
242
  }));
243
243
  };
244
244
 
@@ -284,7 +284,7 @@ function loadQuery<
284
284
  let queryId;
285
285
  if (preloadableRequest.kind === 'PreloadableConcreteRequest') {
286
286
  const preloadableConcreteRequest: PreloadableConcreteRequest<TQuery> =
287
- (preloadableRequest: $FlowFixMe);
287
+ preloadableRequest as $FlowFixMe;
288
288
  ({params} = preloadableConcreteRequest);
289
289
 
290
290
  ({id: queryId} = params);
@@ -329,7 +329,7 @@ function loadQuery<
329
329
  }
330
330
  } else {
331
331
  const graphQlTaggedNode: GraphQLTaggedNode =
332
- (preloadableRequest: $FlowFixMe);
332
+ preloadableRequest as $FlowFixMe;
333
333
  const request = getRequest(graphQlTaggedNode);
334
334
  params = request.params;
335
335
  queryId = params.cacheID != null ? params.cacheID : params.id;
@@ -365,9 +365,7 @@ function loadQuery<
365
365
  isNetworkRequestCancelled = true;
366
366
  };
367
367
  return {
368
- kind: 'PreloadedQuery',
369
- environment,
370
- environmentProviderOptions,
368
+ cancelNetworkRequest,
371
369
  dispose() {
372
370
  if (isDisposed) {
373
371
  return;
@@ -376,21 +374,23 @@ function loadQuery<
376
374
  cancelNetworkRequest();
377
375
  isDisposed = true;
378
376
  },
379
- releaseQuery,
380
- cancelNetworkRequest,
377
+ environment,
378
+ environmentProviderOptions,
381
379
  fetchKey,
380
+ fetchPolicy,
382
381
  id: queryId,
383
382
  // $FlowFixMe[unsafe-getters-setters] - this has no side effects
384
383
  get isDisposed() {
385
384
  return isDisposed || isReleased;
386
385
  },
386
+ kind: 'PreloadedQuery',
387
+ name: params.name,
388
+ networkCacheConfig,
387
389
  // $FlowFixMe[unsafe-getters-setters] - this has no side effects
388
390
  get networkError() {
389
391
  return networkError;
390
392
  },
391
- name: params.name,
392
- networkCacheConfig,
393
- fetchPolicy,
393
+ releaseQuery,
394
394
  source: didMakeNetworkRequest ? returnedObservable : undefined,
395
395
  variables,
396
396
  };
@@ -49,7 +49,7 @@ const pendingQueriesByEnvironment = WEAKMAP_SUPPORTED
49
49
  : new Map<IEnvironment, Map<string, PendingQueryEntry>>();
50
50
 
51
51
  type PendingQueryEntry =
52
- | $ReadOnly<{
52
+ | Readonly<{
53
53
  cacheKey: string,
54
54
  fetchKey: ?string | ?number,
55
55
  fetchPolicy: PreloadFetchPolicy,
@@ -60,7 +60,7 @@ type PendingQueryEntry =
60
60
  subject: ReplaySubject<GraphQLResponse>,
61
61
  subscription: Subscription,
62
62
  }>
63
- | $ReadOnly<{
63
+ | Readonly<{
64
64
  cacheKey: string,
65
65
  fetchKey: ?string | ?number,
66
66
  fetchPolicy: PreloadFetchPolicy,
@@ -70,7 +70,10 @@ type PendingQueryEntry =
70
70
  status: PreloadQueryStatus,
71
71
  }>;
72
72
 
73
- function preloadQuery<TQuery: OperationType, TEnvironmentProviderOptions>(
73
+ function preloadQuery<
74
+ TQuery extends OperationType,
75
+ TEnvironmentProviderOptions,
76
+ >(
74
77
  environment: IEnvironment,
75
78
  preloadableRequest: GraphQLTaggedNode | PreloadableConcreteRequest<TQuery>,
76
79
  variables: VariablesOf<TQuery>,
@@ -124,21 +127,21 @@ function preloadQuery<TQuery: OperationType, TEnvironmentProviderOptions>(
124
127
  })
125
128
  : null;
126
129
  return {
127
- kind: 'PreloadedQuery_DEPRECATED',
128
130
  environment,
129
131
  environmentProviderOptions,
130
132
  fetchKey: queryEntry.fetchKey,
131
133
  fetchPolicy: queryEntry.fetchPolicy,
132
- networkCacheConfig: options?.networkCacheConfig,
133
134
  id: queryEntry.id,
135
+ kind: 'PreloadedQuery_DEPRECATED',
134
136
  name: queryEntry.name,
137
+ networkCacheConfig: options?.networkCacheConfig,
135
138
  source,
136
- variables,
137
139
  status: queryEntry.status,
140
+ variables,
138
141
  };
139
142
  }
140
143
 
141
- function preloadQueryDeduped<TQuery: OperationType>(
144
+ function preloadQueryDeduped<TQuery extends OperationType>(
142
145
  environment: IEnvironment,
143
146
  pendingQueries: Map<string, PendingQueryEntry>,
144
147
  preloadableRequest: GraphQLTaggedNode | PreloadableConcreteRequest<TQuery>,
@@ -149,11 +152,11 @@ function preloadQueryDeduped<TQuery: OperationType>(
149
152
  let query: ?ConcreteRequest;
150
153
  if (preloadableRequest.kind === 'PreloadableConcreteRequest') {
151
154
  const preloadableConcreteRequest: PreloadableConcreteRequest<TQuery> =
152
- (preloadableRequest: $FlowFixMe);
155
+ preloadableRequest as $FlowFixMe;
153
156
  params = preloadableConcreteRequest.params;
154
157
  query = params.id != null ? PreloadableQueryRegistry.get(params.id) : null;
155
158
  } else {
156
- query = getRequest((preloadableRequest: $FlowFixMe));
159
+ query = getRequest(preloadableRequest as $FlowFixMe);
157
160
  params = query.params;
158
161
  }
159
162
  const network = environment.getNetwork();
@@ -189,13 +192,13 @@ function preloadQueryDeduped<TQuery: OperationType>(
189
192
  cacheKey,
190
193
  fetchKey,
191
194
  fetchPolicy,
192
- kind: 'cache',
193
195
  id: params.id,
196
+ kind: 'cache',
194
197
  name: params.name,
195
198
  status: {
196
199
  cacheConfig: networkCacheConfig,
197
- source: 'cache',
198
200
  fetchTime: availability?.fetchTime ?? null,
201
+ source: 'cache',
199
202
  },
200
203
  };
201
204
  if (!environment.isServer() && prevQueryEntry == null) {
@@ -224,13 +227,13 @@ function preloadQueryDeduped<TQuery: OperationType>(
224
227
  cacheKey,
225
228
  fetchKey,
226
229
  fetchPolicy,
227
- kind: 'network',
228
230
  id: params.id,
231
+ kind: 'network',
229
232
  name: params.name,
230
233
  status: {
231
234
  cacheConfig: networkCacheConfig,
232
- source: 'network',
233
235
  fetchTime: null,
236
+ source: 'network',
234
237
  },
235
238
  subject,
236
239
  subscription: source
@@ -22,19 +22,19 @@ import type {
22
22
  const preloadQuery = require('./preloadQuery_DEPRECATED');
23
23
 
24
24
  function prepareEntryPoint<
25
- TEntryPointParams: {...},
25
+ TEntryPointParams extends {...},
26
26
  // $FlowExpectedError[unclear-type] Need any to make it supertype of all PreloadedQuery
27
- TPreloadedQueries: {+[string]: PreloadedQuery<any>},
28
- TPreloadedEntryPoints: {...},
29
- TRuntimeProps: {...},
27
+ TPreloadedQueries extends {+[string]: PreloadedQuery<any>},
28
+ TPreloadedEntryPoints extends {...},
29
+ TRuntimeProps extends {...},
30
30
  TExtraProps,
31
- TEntryPointComponent: EntryPointComponent<
31
+ TEntryPointComponent extends EntryPointComponent<
32
32
  TPreloadedQueries,
33
33
  TPreloadedEntryPoints,
34
34
  TRuntimeProps,
35
35
  TExtraProps,
36
36
  >,
37
- TEntryPoint: EntryPoint<TEntryPointParams, TEntryPointComponent>,
37
+ TEntryPoint extends EntryPoint<TEntryPointParams, TEntryPointComponent>,
38
38
  >(
39
39
  environmentProvider: IEnvironmentProvider<EnvironmentProviderOptions>,
40
40
  entryPoint: TEntryPoint,
@@ -62,7 +62,7 @@ function prepareEntryPoint<
62
62
  );
63
63
 
64
64
  // $FlowFixMe[incompatible-type]
65
- preloadedQueries[queryPropName] = preloadQuery<OperationType, mixed>(
65
+ preloadedQueries[queryPropName] = preloadQuery<OperationType, unknown>(
66
66
  environment,
67
67
  parameters,
68
68
  variables,