react-relay 21.0.0 → 21.0.1

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 (62) hide show
  1. package/ReactRelayContext.js +1 -1
  2. package/ReactRelayPaginationContainer.js.flow +2 -2
  3. package/ReactRelayTypes.d.ts +377 -0
  4. package/ReactRelayTypes.js.flow +34 -28
  5. package/__flowtests__/RelayModern-flowtest.js.flow +8 -5
  6. package/buildReactRelayContainer.js.flow +1 -1
  7. package/hooks.d.ts +89 -0
  8. package/hooks.js +1 -1
  9. package/index.d.ts +9 -0
  10. package/index.js +1 -1
  11. package/legacy.d.ts +143 -0
  12. package/legacy.js +1 -1
  13. package/package.json +2 -2
  14. package/relay-hooks/EntryPointContainer.react.d.ts +22 -0
  15. package/relay-hooks/EntryPointTypes.flow.js.flow +62 -58
  16. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +2 -2
  17. package/relay-hooks/MatchContainer.d.ts +95 -0
  18. package/relay-hooks/MatchContainer.js.flow +8 -8
  19. package/relay-hooks/ProfilerContext.d.ts +18 -0
  20. package/relay-hooks/QueryResource.js.flow +3 -3
  21. package/relay-hooks/RelayEnvironmentProvider.d.ts +16 -0
  22. package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +3 -3
  23. package/relay-hooks/__flowtests__/utils.js.flow +13 -13
  24. package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +8 -4
  25. package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +4 -4
  26. package/relay-hooks/loadEntryPoint.d.ts +14 -0
  27. package/relay-hooks/loadEntryPoint.js.flow +1 -1
  28. package/relay-hooks/loadQuery.d.ts +20 -0
  29. package/relay-hooks/loadQuery.js.flow +1 -1
  30. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +1 -1
  31. package/relay-hooks/readFragmentInternal.js.flow +2 -2
  32. package/relay-hooks/rsc/serverPreloadQuery.js.flow +7 -7
  33. package/relay-hooks/rsc/serverReadFragment.js.flow +1 -1
  34. package/relay-hooks/useClientQuery.d.ts +16 -0
  35. package/relay-hooks/useEntryPointLoader.d.ts +21 -0
  36. package/relay-hooks/useEntryPointLoader.js.flow +1 -1
  37. package/relay-hooks/useFragment.d.ts +36 -0
  38. package/relay-hooks/useFragment.js.flow +1 -1
  39. package/relay-hooks/useIsParentQueryActive.js.flow +5 -1
  40. package/relay-hooks/useLazyLoadQuery.d.ts +19 -0
  41. package/relay-hooks/useLazyLoadQuery.js.flow +4 -4
  42. package/relay-hooks/useLoadMoreFunction.d.ts +56 -0
  43. package/relay-hooks/useMutation.d.ts +36 -0
  44. package/relay-hooks/useMutation.js.flow +1 -1
  45. package/relay-hooks/usePaginationFragment.d.ts +33 -0
  46. package/relay-hooks/usePaginationFragment.js.flow +9 -5
  47. package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +7 -3
  48. package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +7 -3
  49. package/relay-hooks/usePreloadedQuery.d.ts +17 -0
  50. package/relay-hooks/useQueryLoader.d.ts +33 -0
  51. package/relay-hooks/useQueryLoader.js.flow +1 -1
  52. package/relay-hooks/useRefetchableFragment.d.ts +23 -0
  53. package/relay-hooks/useRefetchableFragment.js.flow +10 -6
  54. package/relay-hooks/useRefetchableFragmentInternal.js.flow +4 -4
  55. package/relay-hooks/useRelayEnvironment.d.ts +10 -0
  56. package/relay-hooks/useSubscribeToInvalidationState.d.ts +19 -0
  57. package/relay-hooks/useSubscription.d.ts +14 -0
  58. package/rsc-client_EXPERIMENTAL.d.ts +17 -0
  59. package/rsc-client_EXPERIMENTAL.js +1 -1
  60. package/rsc_EXPERIMENTAL.d.ts +48 -0
  61. package/rsc_EXPERIMENTAL.js +1 -1
  62. package/rsc_EXPERIMENTAL.js.flow +5 -5
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v21.0.0
2
+ * Relay v21.0.1
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -91,8 +91,8 @@ export type ConnectionConfig = {
91
91
  ...
92
92
  };
93
93
  export type ConnectionData = {
94
- +edges?: ?ReadonlyArray<any>,
95
- +pageInfo?: ?PageInfo,
94
+ readonly edges?: ?ReadonlyArray<any>,
95
+ readonly pageInfo?: ?PageInfo,
96
96
  ...
97
97
  };
98
98
 
@@ -0,0 +1,377 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ import * as React from 'react';
9
+ import {
10
+ _FragmentRefs,
11
+ _RefType,
12
+ CacheConfig,
13
+ ConcreteRequest,
14
+ Disposable,
15
+ DisposeFn,
16
+ Environment,
17
+ FetchPolicy,
18
+ FragmentType,
19
+ GraphQLResponse,
20
+ IEnvironment,
21
+ Observable,
22
+ Observer,
23
+ OperationType,
24
+ PreloadableConcreteRequest,
25
+ RenderPolicy,
26
+ Variables,
27
+ VariablesOf,
28
+ } from 'relay-runtime';
29
+
30
+ export { FragmentRef } from 'relay-runtime';
31
+ export { VariablesOf } from 'relay-runtime';
32
+
33
+ // --- Legacy container types ---
34
+
35
+ export interface RelayProp {
36
+ environment: Environment;
37
+ refetch: undefined; // ensures no RelayRefetchProp is used with a fragment container
38
+ hasMore: undefined; // ensures no RelayPaginationProp is used with a fragment container
39
+ }
40
+
41
+ export interface RelayRefetchProp {
42
+ environment: Environment;
43
+ refetch: (
44
+ refetchVariables: Variables | ((fragmentVariables: Variables) => Variables),
45
+ renderVariables?: Variables | null,
46
+ observerOrCallback?: ObserverOrCallback | null,
47
+ options?: RefetchOptions,
48
+ ) => Disposable;
49
+ hasMore: undefined; // ensures no RelayPaginationProp is used with a refetch container
50
+ }
51
+ export interface RefetchOptions {
52
+ force?: boolean | undefined;
53
+ fetchPolicy?: 'store-or-network' | 'network-only' | undefined;
54
+ }
55
+
56
+ type ObserverOrCallback = Observer<void> | ((error: Error | null | undefined) => void);
57
+
58
+ export interface RelayPaginationProp {
59
+ readonly environment: Environment;
60
+ readonly hasMore: () => boolean;
61
+ readonly isLoading: () => boolean;
62
+ readonly loadMore: (
63
+ pageSize: number,
64
+ observerOrCallback?: ObserverOrCallback | null,
65
+ options?: RefetchOptions | null,
66
+ ) => Disposable | null | undefined;
67
+ readonly refetchConnection: (
68
+ totalCount: number,
69
+ observerOrCallback?: ObserverOrCallback | null,
70
+ refetchVariables?: Variables | null,
71
+ ) => Disposable | null | undefined;
72
+ refetch: undefined; // ensures no RelayRefetchProp is used with a pagination container
73
+ }
74
+
75
+ export type FragmentOrRegularProp<T> = T extends _RefType<infer U> ? _FragmentRefs<U>
76
+ : T extends ReadonlyArray<_RefType<infer U>> ? ReadonlyArray<_FragmentRefs<U>>
77
+ : T;
78
+
79
+ export type MappedFragmentProps<T> = {
80
+ [K in keyof T]: FragmentOrRegularProp<T[K]>;
81
+ };
82
+
83
+ // --- Fragment key types (from helpers) ---
84
+
85
+ export type KeyType<TData = unknown> = Readonly<{
86
+ ' $data'?: TData | undefined;
87
+ ' $fragmentSpreads': FragmentType;
88
+ }>;
89
+
90
+ export type KeyTypeData<TKey extends KeyType<TData>, TData = unknown> = Required<TKey>[' $data'];
91
+
92
+ export type ArrayKeyType<TData = unknown> = ReadonlyArray<KeyType<readonly TData[]> | null | undefined>;
93
+ export type ArrayKeyTypeData<TKey extends ArrayKeyType<TData>, TData = unknown> = KeyTypeData<
94
+ NonNullable<TKey[number]>
95
+ >;
96
+
97
+ export type GetEntryPointParamsFromEntryPoint<TEntryPoint> = TEntryPoint extends EntryPoint<
98
+ infer _TEntryPointComponent,
99
+ infer TEntryPointParams
100
+ > ? TEntryPointParams
101
+ : never;
102
+
103
+ export type GetEntryPointComponentFromEntryPoint<TEntryPoint> = TEntryPoint extends EntryPoint<
104
+ infer TEntryPointComponent,
105
+ infer _TEntryPointParams
106
+ > ? TEntryPointComponent
107
+ : never;
108
+
109
+ // --- EntryPoint types ---
110
+
111
+ export interface JSResourceReference<TModule> {
112
+ getModuleId(): string;
113
+
114
+ getModuleIfRequired(): TModule | null;
115
+
116
+ load(): Promise<TModule>;
117
+ }
118
+
119
+ export type PreloadFetchPolicy = 'store-or-network' | 'store-and-network' | 'network-only';
120
+
121
+ export type PreloadOptions = Readonly<{
122
+ fetchKey?: string | number | undefined;
123
+ fetchPolicy?: PreloadFetchPolicy | null | undefined;
124
+ networkCacheConfig?: CacheConfig | null | undefined;
125
+ }>;
126
+
127
+ export type LoadQueryOptions = Readonly<{
128
+ fetchPolicy?: FetchPolicy | null | undefined;
129
+ networkCacheConfig?: CacheConfig | null | undefined;
130
+ onQueryAstLoadTimeout?: (() => void) | null | undefined;
131
+ }>;
132
+
133
+ export type EnvironmentProviderOptions<T extends Record<string, unknown> = Record<string, unknown>> = T;
134
+
135
+ export type PreloadedQuery<
136
+ TQuery extends OperationType,
137
+ TEnvironmentProviderOptions = EnvironmentProviderOptions,
138
+ > = Readonly<{
139
+ kind: 'PreloadedQuery';
140
+ environment: IEnvironment;
141
+ environmentProviderOptions?: TEnvironmentProviderOptions | null | undefined;
142
+ fetchKey: string | number;
143
+ fetchPolicy: PreloadFetchPolicy;
144
+ networkCacheConfig?: CacheConfig | null | undefined;
145
+ id?: string | null | undefined;
146
+ name: string;
147
+ source?: Observable<GraphQLResponse> | null | undefined;
148
+ variables: VariablesOf<TQuery>;
149
+ dispose: DisposeFn;
150
+ isDisposed: boolean;
151
+ }>;
152
+
153
+ export type PreloadQueryStatus = Readonly<{
154
+ cacheConfig?: CacheConfig | null | undefined;
155
+ source: 'cache' | 'network';
156
+ fetchTime?: number | null | undefined;
157
+ }>;
158
+
159
+ /**
160
+ * The Interface of the EntryPoints .entrypoint files
161
+ *
162
+ * Every .entrypoint file it's an object that must have two required fields:
163
+ * - getPreloadProps(...) function that will return the description of preloaded
164
+ * queries and preloaded (nested) entry points for the current entry point
165
+ * - root - JSResource of the module that will render those preloaded queries
166
+ *
167
+ * TEntryPointParams - object that contains all necessary information to execute
168
+ * the preloaders (routeParams, query variables)
169
+ *
170
+ * TPreloadedQueries - queries, defined in the root components
171
+ *
172
+ * TNestedEntryPoints - nested entry points, defined in the root components
173
+ *
174
+ * TRuntimeProps - the type of additional props that you may pass to the
175
+ * component (like `onClick` handler, etc) during runtime. Values for them
176
+ * defined during component runtime
177
+ *
178
+ * TExtraProps - a bag of extra props that you may define in `entrypoint` file
179
+ * and they will be passed to the EntryPointComponent as `extraProps`
180
+ */
181
+ type InternalEntryPointRepresentation<
182
+ TEntryPointParams extends Record<string, unknown>,
183
+ TPreloadedQueries extends Record<string, OperationType>,
184
+ TNestedEntryPoints extends Record<string, unknown>,
185
+ TRuntimeProps extends Record<string, unknown>,
186
+ TExtraProps extends Record<string, unknown> | null,
187
+ > = Readonly<{
188
+ root: JSResourceReference<
189
+ EntryPointComponent<TPreloadedQueries, TNestedEntryPoints, TRuntimeProps, TExtraProps>
190
+ >;
191
+ getPreloadProps: (
192
+ entryPointParams: TEntryPointParams,
193
+ ) => PreloadProps<TEntryPointParams, TPreloadedQueries, TNestedEntryPoints, TExtraProps>;
194
+ }>;
195
+
196
+ type ThinQueryParamsObject<TPreloadedQueries extends Record<string, OperationType> = Record<string, never>> = {
197
+ [K in keyof TPreloadedQueries]: ThinQueryParams<TPreloadedQueries[K]>;
198
+ };
199
+
200
+ type ThinNestedEntryPointParamsObject<
201
+ TEntryPoints extends Record<string, EntryPoint<any, any> | undefined> = Record<string, never>,
202
+ > = {
203
+ [K in keyof TEntryPoints]: ThinNestedEntryPointParams<TEntryPoints[K]>;
204
+ };
205
+
206
+ type PreloadedQueries<TPreloadedQueries> = TPreloadedQueries extends Record<string, OperationType> ? {
207
+ [T in keyof TPreloadedQueries]: PreloadedQuery<TPreloadedQueries[T]>;
208
+ }
209
+ : never;
210
+
211
+ type PreloadedEntryPoints<TEntryPoints> = TEntryPoints extends Record<
212
+ string,
213
+ InternalEntryPointRepresentation<any, any, any, any, any> | undefined
214
+ > ? {
215
+ [T in keyof TEntryPoints]: PreloadedEntryPoint<
216
+ GetEntryPointComponentFromEntryPoint<TEntryPoints[T]>
217
+ >;
218
+ }
219
+ : never;
220
+
221
+ export type PreloadProps<
222
+ _TPreloadParams extends Record<string, unknown>,
223
+ TPreloadedQueries extends Record<string, OperationType>,
224
+ TNestedEntryPoints extends Record<string, EntryPoint<any, any> | undefined>,
225
+ TExtraProps extends Record<string, unknown> | null,
226
+ > = Readonly<{
227
+ entryPoints?: ThinNestedEntryPointParamsObject<TNestedEntryPoints> | undefined;
228
+ extraProps?: TExtraProps | undefined;
229
+ queries?: ThinQueryParamsObject<TPreloadedQueries> | undefined;
230
+ }>;
231
+
232
+ export type EntryPointProps<TPreloadedQueries, TNestedEntryPoints, TRuntimeProps, TExtraProps> = Readonly<{
233
+ entryPoints: PreloadedEntryPoints<TNestedEntryPoints>;
234
+ extraProps: TExtraProps;
235
+ props: TRuntimeProps;
236
+ queries: PreloadedQueries<TPreloadedQueries>;
237
+ }>;
238
+
239
+ export type EntryPointComponent<
240
+ TPreloadedQueries extends Record<string, OperationType>,
241
+ TNestedEntryPoints extends Record<string, EntryPoint<any, any> | undefined>,
242
+ TRuntimeProps extends Record<string, unknown> = Record<string, unknown>,
243
+ TExtraProps extends Record<string, unknown> | null = Record<string, unknown>,
244
+ > = React.ComponentType<EntryPointProps<TPreloadedQueries, TNestedEntryPoints, TRuntimeProps, TExtraProps>>;
245
+
246
+ export type PreloadedEntryPoint<TEntryPointComponent> = TEntryPointComponent extends EntryPointComponent<
247
+ infer TPreloadedQueries,
248
+ infer TNestedEntryPoints,
249
+ infer _TRuntimeProps,
250
+ infer TExtraProps
251
+ > ? Readonly<{
252
+ dispose: DisposeFn;
253
+ entryPoints: PreloadedEntryPoints<TNestedEntryPoints>;
254
+ extraProps: TExtraProps;
255
+ getComponent: () => TEntryPointComponent;
256
+ isDisposed: boolean;
257
+ queries: PreloadedQueries<TPreloadedQueries>;
258
+ rootModuleID: string;
259
+ }>
260
+ : never;
261
+
262
+ export type ThinQueryParams<
263
+ TQuery extends OperationType,
264
+ TEnvironmentProviderOptions extends EnvironmentProviderOptions = EnvironmentProviderOptions,
265
+ > = Readonly<{
266
+ parameters: ConcreteRequest | PreloadableConcreteRequest<TQuery>;
267
+ variables: VariablesOf<TQuery>;
268
+ options?: PreloadOptions | null | undefined;
269
+ environmentProviderOptions?: TEnvironmentProviderOptions | null | undefined;
270
+ }>;
271
+
272
+ export type ThinNestedEntryPointParams<TEntryPoint> = Readonly<{
273
+ entryPoint: TEntryPoint;
274
+ entryPointParams: GetEntryPointParamsFromEntryPoint<TEntryPoint>;
275
+ }>;
276
+
277
+ export type EntryPoint<TEntryPointComponent, TEntryPointParams extends Record<string, unknown> = Record<string, unknown>> = InternalEntryPointRepresentation<
278
+ TEntryPointParams,
279
+ TEntryPointComponent extends EntryPointComponent<infer TPreloadedQueries, any, any, any> ? TPreloadedQueries
280
+ : never,
281
+ TEntryPointComponent extends EntryPointComponent<any, infer TNestedEntryPoints, any, any> ? TNestedEntryPoints
282
+ : never,
283
+ TEntryPointComponent extends EntryPointComponent<any, any, infer TRuntimeProps, any> ? TRuntimeProps : never,
284
+ TEntryPointComponent extends EntryPointComponent<any, any, any, infer TExtraProps> ? TExtraProps : never
285
+ >;
286
+
287
+ export interface IEnvironmentProvider<TOptions> {
288
+ getEnvironment(options: TOptions | null): IEnvironment;
289
+ }
290
+
291
+ // --- Refetchable fragment types (from useRefetchableFragmentNode) ---
292
+
293
+ export type RefetchFn<TQuery extends OperationType, TOptions = RefetchableOptions> = RefetchFnExact<TQuery, TOptions>;
294
+
295
+ export type RefetchFnDynamic<
296
+ TQuery extends OperationType,
297
+ _TKey extends KeyType | null | undefined,
298
+ TOptions = RefetchableOptions,
299
+ > = RefetchInexactDynamicResponse<TQuery, TOptions> & RefetchExactDynamicResponse<TQuery, TOptions>;
300
+
301
+ export type RefetchInexact<TQuery extends OperationType, TOptions> = (
302
+ data?: unknown,
303
+ ) => RefetchFnInexact<TQuery, TOptions>;
304
+ export type RefetchInexactDynamicResponse<TQuery extends OperationType, TOptions> = ReturnType<
305
+ RefetchInexact<TQuery, TOptions>
306
+ >;
307
+
308
+ export type RefetchExact<TQuery extends OperationType, TOptions> = (
309
+ data?: unknown | null,
310
+ ) => RefetchFnExact<TQuery, TOptions>;
311
+ export type RefetchExactDynamicResponse<TQuery extends OperationType, TOptions> = ReturnType<
312
+ RefetchExact<TQuery, TOptions>
313
+ >;
314
+
315
+ export type RefetchFnBase<TVars, TOptions> = (vars: TVars, options?: TOptions) => Disposable;
316
+
317
+ export type RefetchFnExact<TQuery extends OperationType, TOptions = RefetchableOptions> = RefetchFnBase<
318
+ VariablesOf<TQuery>,
319
+ TOptions
320
+ >;
321
+ export type RefetchFnInexact<TQuery extends OperationType, TOptions = RefetchableOptions> = RefetchFnBase<
322
+ Partial<VariablesOf<TQuery>>,
323
+ TOptions
324
+ >;
325
+
326
+ export interface ReturnTypeNode<
327
+ TQuery extends OperationType,
328
+ TKey extends KeyType | null | undefined,
329
+ TOptions = RefetchableOptions,
330
+ > {
331
+ fragmentData: unknown;
332
+ fragmentRef: unknown;
333
+ refetch: RefetchFnDynamic<TQuery, TKey, TOptions>;
334
+ disableStoreUpdates: () => void;
335
+ enableStoreUpdates: () => void;
336
+ }
337
+
338
+ export interface RefetchableOptions {
339
+ fetchPolicy?: FetchPolicy | undefined;
340
+ onComplete?: ((arg: Error | null) => void) | undefined;
341
+ UNSTABLE_renderPolicy?: RenderPolicy | undefined;
342
+ }
343
+
344
+ export interface InternalRefetchableOptions extends RefetchableOptions {
345
+ __environment?: IEnvironment | undefined;
346
+ }
347
+
348
+ export type RefetchableAction =
349
+ | {
350
+ type: 'reset';
351
+ environment: IEnvironment;
352
+ fragmentIdentifier: string;
353
+ }
354
+ | {
355
+ type: 'refetch';
356
+ refetchVariables: Variables;
357
+ fetchPolicy?: FetchPolicy | undefined;
358
+ renderPolicy?: RenderPolicy | undefined;
359
+ onComplete?: ((args: Error | null) => void) | undefined;
360
+ environment?: IEnvironment | null | undefined;
361
+ };
362
+
363
+ export interface RefetchState {
364
+ fetchPolicy?: FetchPolicy | undefined;
365
+ renderPolicy?: RenderPolicy | undefined;
366
+ mirroredEnvironment: IEnvironment;
367
+ mirroredFragmentIdentifier: string;
368
+ onComplete?: ((arg: Error | null) => void) | undefined;
369
+ refetchEnvironment?: IEnvironment | null | undefined;
370
+ refetchVariables?: Variables | null | undefined;
371
+ refetchGeneration: number;
372
+ }
373
+
374
+ export interface DebugIDandTypename {
375
+ id: string;
376
+ typename: string;
377
+ }
@@ -26,18 +26,18 @@ export type ObserverOrCallback = Observer<void> | ((error: ?Error) => unknown);
26
26
 
27
27
  // NOTE: This is an inexact type in order to allow a RelayPaginationProp or
28
28
  // RelayRefetchProp to flow into a RelayProp.
29
- export type RelayProp = {+environment: IEnvironment, ...};
29
+ export type RelayProp = {readonly environment: IEnvironment, ...};
30
30
 
31
31
  export type RelayPaginationProp = {
32
- +environment: IEnvironment,
33
- +hasMore: () => boolean,
34
- +isLoading: () => boolean,
35
- +loadMore: (
32
+ readonly environment: IEnvironment,
33
+ readonly hasMore: () => boolean,
34
+ readonly isLoading: () => boolean,
35
+ readonly loadMore: (
36
36
  pageSize: number,
37
37
  observerOrCallback: ?ObserverOrCallback,
38
38
  options?: RefetchOptions,
39
39
  ) => ?Disposable,
40
- +refetchConnection: (
40
+ readonly refetchConnection: (
41
41
  totalCount: number,
42
42
  observerOrCallback: ?ObserverOrCallback,
43
43
  refetchVariables: ?Variables,
@@ -45,8 +45,8 @@ export type RelayPaginationProp = {
45
45
  };
46
46
 
47
47
  export type RelayRefetchProp = {
48
- +environment: IEnvironment,
49
- +refetch: (
48
+ readonly environment: IEnvironment,
49
+ readonly refetch: (
50
50
  refetchVariables: Variables | ((fragmentVariables: Variables) => Variables),
51
51
  renderVariables: ?Variables,
52
52
  observerOrCallback: ?ObserverOrCallback,
@@ -55,9 +55,9 @@ export type RelayRefetchProp = {
55
55
  };
56
56
 
57
57
  export type RefetchOptions = {
58
- +force?: boolean,
59
- +fetchPolicy?: 'store-or-network' | 'network-only',
60
- +metadata?: {[key: string]: unknown, ...},
58
+ readonly force?: boolean,
59
+ readonly fetchPolicy?: 'store-or-network' | 'network-only',
60
+ readonly metadata?: {[key: string]: unknown, ...},
61
61
  };
62
62
 
63
63
  /**
@@ -93,7 +93,7 @@ export type RefetchOptions = {
93
93
  *
94
94
  */
95
95
  export type $FragmentRef<T> = {
96
- +$fragmentSpreads: T['$fragmentType'],
96
+ readonly $fragmentSpreads: T['$fragmentType'],
97
97
  ...
98
98
  };
99
99
 
@@ -114,36 +114,42 @@ export type $RelayProps<Props, _RelayPropT = RelayProp> = MapRelayProps<
114
114
  >;
115
115
 
116
116
  type MapRelayProps<Props> = {[K in keyof Props]: MapRelayProp<Props[K]>};
117
- type MapRelayProp<T> = [+t: T] extends [+t: {+$fragmentType: empty, ...}]
117
+ type MapRelayProp<T> = [readonly t: T] extends [
118
+ readonly t: {readonly $fragmentType: empty, ...},
119
+ ]
118
120
  ? T
119
- : [+t: T] extends [+t: ?{+$fragmentType: empty, ...}]
121
+ : [readonly t: T] extends [readonly t: ?{readonly $fragmentType: empty, ...}]
120
122
  ? ?T
121
- : [+t: T] extends [+t: {+$fragmentType: FragmentType, ...}]
123
+ : [readonly t: T] extends [
124
+ readonly t: {readonly $fragmentType: FragmentType, ...},
125
+ ]
122
126
  ? $FragmentRef<T>
123
- : [+t: T] extends [+t: ?{+$fragmentType: FragmentType, ...}]
127
+ : [readonly t: T] extends [
128
+ readonly t: ?{readonly $fragmentType: FragmentType, ...},
129
+ ]
124
130
  ? ?$FragmentRef<NonNullable<T>>
125
- : [+t: T] extends [
126
- +t: ReadonlyArray<
127
- infer V extends {+$fragmentType: FragmentType, ...},
131
+ : [readonly t: T] extends [
132
+ readonly t: ReadonlyArray<
133
+ infer V extends {readonly $fragmentType: FragmentType, ...},
128
134
  >,
129
135
  ]
130
136
  ? ReadonlyArray<$FragmentRef<V>>
131
- : [+t: T] extends [
132
- +t: ?ReadonlyArray<
133
- infer V extends {+$fragmentType: FragmentType, ...},
137
+ : [readonly t: T] extends [
138
+ readonly t: ?ReadonlyArray<
139
+ infer V extends {readonly $fragmentType: FragmentType, ...},
134
140
  >,
135
141
  ]
136
142
  ? ?ReadonlyArray<$FragmentRef<V>>
137
- : [+t: T] extends [
138
- +t: ReadonlyArray<?infer V extends {
139
- +$fragmentType: FragmentType,
143
+ : [readonly t: T] extends [
144
+ readonly t: ReadonlyArray<?infer V extends {
145
+ readonly $fragmentType: FragmentType,
140
146
  ...
141
147
  }>,
142
148
  ]
143
149
  ? ReadonlyArray<?$FragmentRef<NonNullable<V>>>
144
- : [+t: T] extends [
145
- +t: ?ReadonlyArray<?infer V extends {
146
- +$fragmentType: FragmentType,
150
+ : [readonly t: T] extends [
151
+ readonly t: ?ReadonlyArray<?infer V extends {
152
+ readonly $fragmentType: FragmentType,
147
153
  ...
148
154
  }>,
149
155
  ]
@@ -126,22 +126,22 @@ const PluralTestFragment = createFragmentContainer(PluralTest, {
126
126
  });
127
127
 
128
128
  declare var aUserRef: {
129
- +$fragmentSpreads: RelayModernFlowtest_user$ref,
129
+ readonly $fragmentSpreads: RelayModernFlowtest_user$ref,
130
130
  ...
131
131
  };
132
132
 
133
133
  declare var oneOfUsersRef: {
134
- +$fragmentSpreads: RelayModernFlowtest_users$ref,
134
+ readonly $fragmentSpreads: RelayModernFlowtest_users$ref,
135
135
  ...
136
136
  };
137
137
 
138
138
  declare var usersRef: ReadonlyArray<{
139
- +$fragmentSpreads: RelayModernFlowtest_users$ref,
139
+ readonly $fragmentSpreads: RelayModernFlowtest_users$ref,
140
140
  ...
141
141
  }>;
142
142
 
143
143
  declare var nonUserRef: {
144
- +$fragmentSpreads: {thing: true, ...},
144
+ readonly $fragmentSpreads: {thing: true, ...},
145
145
  ...
146
146
  };
147
147
 
@@ -207,7 +207,10 @@ function cb(): void {}
207
207
  />;
208
208
 
209
209
  declare var aComplexUserRef: {
210
- +$fragmentSpreads: {thing1: true, ...} & RelayModernFlowtest_user$ref & {
210
+ readonly $fragmentSpreads: {
211
+ thing1: true,
212
+ ...
213
+ } & RelayModernFlowtest_user$ref & {
211
214
  thing2: true,
212
215
  ...
213
216
  },
@@ -56,7 +56,7 @@ function buildReactRelayContainer<TBase extends component(...empty)>(
56
56
  props: any,
57
57
  ref:
58
58
  | ((null | React.ElementRef<TBase>) => unknown)
59
- | {-current: null | React.ElementRef<TBase>, ...},
59
+ | {writeonly current: null | React.ElementRef<TBase>, ...},
60
60
  ) {
61
61
  // $FlowFixMe[react-rule-hook]
62
62
  const context = useContext(ReactRelayContext);
package/hooks.d.ts ADDED
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ export {
9
+ EntryPoint,
10
+ EntryPointComponent,
11
+ EntryPointProps,
12
+ EnvironmentProviderOptions,
13
+ IEnvironmentProvider,
14
+ JSResourceReference,
15
+ LoadQueryOptions,
16
+ PreloadedEntryPoint,
17
+ PreloadedQuery,
18
+ PreloadFetchPolicy,
19
+ PreloadOptions,
20
+ PreloadProps,
21
+ PreloadQueryStatus,
22
+ ThinNestedEntryPointParams,
23
+ ThinQueryParams,
24
+ VariablesOf,
25
+ } from './ReactRelayTypes';
26
+
27
+ export {
28
+ DataID,
29
+ DeclarativeMutationConfig,
30
+ Disposable,
31
+ FetchPolicy,
32
+ GraphQLTaggedNode,
33
+ // RelayRuntime has two environment exports: one interface, one concrete.
34
+ IEnvironment as Environment,
35
+ MutationType,
36
+ MutationTypes,
37
+ NormalizationSelector,
38
+ OperationDescriptor,
39
+ RangeOperation,
40
+ RangeOperations,
41
+ ReaderSelector,
42
+ RelayContext,
43
+ Snapshot,
44
+ Variables,
45
+ } from 'relay-runtime';
46
+ export { MatchContainerProps, MatchPointer } from './relay-hooks/MatchContainer';
47
+ export { ProfilerContextType } from './relay-hooks/ProfilerContext';
48
+ export { Direction, LoadMoreFn } from './relay-hooks/useLoadMoreFunction';
49
+ export { UseMutationConfig } from './relay-hooks/useMutation';
50
+ export { UseQueryLoaderLoadQueryOptions } from './relay-hooks/useQueryLoader';
51
+ export { RefetchableOptions as RefetchOptions, RefetchFn, RefetchFnDynamic } from './ReactRelayTypes';
52
+
53
+ // /**
54
+ // * The public interface for Relay Hooks.
55
+ // */
56
+
57
+ export { graphql } from 'relay-runtime';
58
+
59
+ export { ConnectionHandler } from 'relay-runtime';
60
+
61
+ export { applyOptimisticMutation } from 'relay-runtime';
62
+ export { commitLocalUpdate } from 'relay-runtime';
63
+ export { commitMutation } from 'relay-runtime';
64
+
65
+ export { readInlineData } from 'relay-runtime';
66
+ export { requestSubscription } from 'relay-runtime';
67
+
68
+ export { EntryPointContainer } from './relay-hooks/EntryPointContainer.react';
69
+ export { RelayEnvironmentProvider } from './relay-hooks/RelayEnvironmentProvider';
70
+
71
+ export { ProfilerContext } from './relay-hooks/ProfilerContext';
72
+
73
+ export { fetchQuery } from 'relay-runtime';
74
+
75
+ export { loadEntryPoint } from './relay-hooks/loadEntryPoint';
76
+ export { loadQuery } from './relay-hooks/loadQuery';
77
+
78
+ export { useClientQuery } from './relay-hooks/useClientQuery';
79
+ export { useEntryPointLoader } from './relay-hooks/useEntryPointLoader';
80
+ export { useFragment } from './relay-hooks/useFragment';
81
+ export { useLazyLoadQuery } from './relay-hooks/useLazyLoadQuery';
82
+ export { useMutation } from './relay-hooks/useMutation';
83
+ export { usePaginationFragment } from './relay-hooks/usePaginationFragment';
84
+ export { usePreloadedQuery } from './relay-hooks/usePreloadedQuery';
85
+ export { useQueryLoader } from './relay-hooks/useQueryLoader';
86
+ export { useRefetchableFragment } from './relay-hooks/useRefetchableFragment';
87
+ export { useRelayEnvironment } from './relay-hooks/useRelayEnvironment';
88
+ export { useSubscribeToInvalidationState } from './relay-hooks/useSubscribeToInvalidationState';
89
+ export { useSubscription } from './relay-hooks/useSubscription';
package/hooks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v21.0.0
2
+ * Relay v21.0.1
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/index.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+
8
+ export * from './hooks';
9
+ export * from './legacy';
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v21.0.0
2
+ * Relay v21.0.1
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *