react-relay 17.0.0 → 18.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 (49) hide show
  1. package/ReactRelayContainerUtils.js.flow +2 -2
  2. package/ReactRelayContext.js +1 -1
  3. package/ReactRelayContext.js.flow +1 -1
  4. package/ReactRelayFragmentContainer.js.flow +2 -2
  5. package/ReactRelayPaginationContainer.js.flow +2 -2
  6. package/ReactRelayQueryRenderer.js.flow +1 -1
  7. package/ReactRelayQueryRendererContext.js.flow +1 -1
  8. package/ReactRelayRefetchContainer.js.flow +2 -2
  9. package/ReactRelayTypes.js.flow +45 -18
  10. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +2 -2
  11. package/buildReactRelayContainer.js.flow +5 -5
  12. package/hooks.js +1 -1
  13. package/index.js +1 -1
  14. package/legacy.js +1 -1
  15. package/lib/relay-hooks/loadEntryPoint.js +8 -5
  16. package/lib/relay-hooks/loadQuery.js +2 -14
  17. package/lib/relay-hooks/useEntryPointLoader.js +5 -8
  18. package/lib/relay-hooks/useFragment.js +4 -7
  19. package/lib/relay-hooks/useFragmentInternal.js +6 -484
  20. package/lib/relay-hooks/useFragmentInternal_CURRENT.js +483 -0
  21. package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +520 -0
  22. package/lib/relay-hooks/useLazyLoadQuery.js +2 -5
  23. package/lib/relay-hooks/usePreloadedQuery.js +6 -9
  24. package/lib/relay-hooks/useQueryLoader.js +1 -3
  25. package/multi-actor/ActorChange.js.flow +1 -1
  26. package/package.json +3 -3
  27. package/react-relay-hooks.js +2 -2
  28. package/react-relay-hooks.min.js +2 -2
  29. package/react-relay-legacy.js +1 -1
  30. package/react-relay-legacy.min.js +1 -1
  31. package/react-relay.js +2 -2
  32. package/react-relay.min.js +2 -2
  33. package/relay-hooks/EntryPointTypes.flow.js.flow +35 -12
  34. package/relay-hooks/LazyLoadEntryPointContainer_DEPRECATED.react.js.flow +8 -4
  35. package/relay-hooks/MatchContainer.js.flow +1 -1
  36. package/relay-hooks/ProfilerContext.js.flow +1 -1
  37. package/relay-hooks/__flowtests__/EntryPointTypes/ExtractQueryTypes-flowtest.js.flow +43 -0
  38. package/relay-hooks/loadEntryPoint.js.flow +10 -4
  39. package/relay-hooks/loadQuery.js.flow +4 -28
  40. package/relay-hooks/prepareEntryPoint_DEPRECATED.js.flow +4 -1
  41. package/relay-hooks/useEntryPointLoader.js.flow +3 -4
  42. package/relay-hooks/useFragment.js.flow +0 -5
  43. package/relay-hooks/useFragmentInternal.js.flow +19 -643
  44. package/relay-hooks/useFragmentInternal_CURRENT.js.flow +669 -0
  45. package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +764 -0
  46. package/relay-hooks/useLazyLoadQuery.js.flow +0 -5
  47. package/relay-hooks/usePaginationFragment.js.flow +1 -1
  48. package/relay-hooks/usePreloadedQuery.js.flow +0 -5
  49. package/relay-hooks/useQueryLoader.js.flow +1 -2
@@ -11,11 +11,11 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- function getComponentName(component: React$ComponentType<any>): string {
14
+ function getComponentName(component: React.ComponentType<any>): string {
15
15
  return component.displayName || component.name || 'Component';
16
16
  }
17
17
 
18
- function getContainerName(Component: React$ComponentType<any>): string {
18
+ function getContainerName(Component: React.ComponentType<any>): string {
19
19
  return 'Relay(' + getComponentName(Component) + ')';
20
20
  }
21
21
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v17.0.0
2
+ * Relay v18.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -19,4 +19,4 @@ const {
19
19
 
20
20
  module.exports = (createRelayContext(
21
21
  React,
22
- ): React$Context<RelayContext | null>);
22
+ ): React.Context<RelayContext | null>);
@@ -51,7 +51,7 @@ function createContainerWithFragments<
51
51
  Component: TComponent,
52
52
  fragments: FragmentMap,
53
53
  ): React.ComponentType<
54
- $RelayProps<React$ElementConfig<TComponent>, RelayProp>,
54
+ $RelayProps<React.ElementConfig<TComponent>, RelayProp>,
55
55
  > {
56
56
  const containerName = getContainerName(Component);
57
57
 
@@ -275,7 +275,7 @@ function createContainer<
275
275
  Component: TComponent,
276
276
  fragmentSpec: GeneratedNodeMap,
277
277
  ): React.AbstractComponent<
278
- $RelayProps<React$ElementConfig<TComponent>, RelayProp>,
278
+ $RelayProps<React.ElementConfig<TComponent>, RelayProp>,
279
279
  Instance,
280
280
  > {
281
281
  // $FlowFixMe[incompatible-return]
@@ -325,7 +325,7 @@ function createContainerWithFragments<
325
325
  fragments: FragmentMap,
326
326
  connectionConfig: ConnectionConfig,
327
327
  ): React.ComponentType<
328
- $RelayProps<React$ElementConfig<TComponent>, RelayPaginationProp>,
328
+ $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
329
329
  > {
330
330
  const componentName = getComponentName(Component);
331
331
  const containerName = getContainerName(Component);
@@ -942,7 +942,7 @@ function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
942
942
  fragmentSpec: GeneratedNodeMap,
943
943
  connectionConfig: ConnectionConfig,
944
944
  ): React.ComponentType<
945
- $RelayProps<React$ElementConfig<TComponent>, RelayPaginationProp>,
945
+ $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
946
946
  > {
947
947
  // $FlowFixMe[incompatible-return]
948
948
  return buildReactRelayContainer(
@@ -263,7 +263,7 @@ class ReactRelayQueryRenderer extends React.Component<Props, State> {
263
263
  });
264
264
  };
265
265
 
266
- render(): React.Element<typeof ReactRelayContext.Provider> {
266
+ render(): React.MixedElement {
267
267
  const {renderProps, relayContext} = this.state;
268
268
  // Note that the root fragment results in `renderProps.props` is already
269
269
  // frozen by the store; this call is to freeze the renderProps object and
@@ -16,4 +16,4 @@ export type ReactRelayQueryRendererContext = {rootIsQueryRenderer: boolean};
16
16
 
17
17
  module.exports = (React.createContext({
18
18
  rootIsQueryRenderer: false,
19
- }): React$Context<ReactRelayQueryRendererContext | null>);
19
+ }): React.Context<ReactRelayQueryRendererContext | null>);
@@ -75,7 +75,7 @@ function createContainerWithFragments<
75
75
  fragments: FragmentMap,
76
76
  taggedNode: GraphQLTaggedNode,
77
77
  ): React.ComponentType<
78
- $RelayProps<React$ElementConfig<TComponent>, RelayRefetchProp>,
78
+ $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
79
79
  > {
80
80
  const containerName = getContainerName(Component);
81
81
 
@@ -491,7 +491,7 @@ function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
491
491
  fragmentSpec: GeneratedNodeMap,
492
492
  taggedNode: GraphQLTaggedNode,
493
493
  ): React.ComponentType<
494
- $RelayProps<React$ElementConfig<TComponent>, RelayRefetchProp>,
494
+ $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
495
495
  > {
496
496
  // $FlowFixMe[incompatible-return]
497
497
  return buildReactRelayContainer(
@@ -103,28 +103,55 @@ export type $FragmentRef<T> = {
103
103
  */
104
104
  // prettier-ignore
105
105
  // $FlowFixMe[extra-type-arg] xplat redux flow type error
106
- // $FlowFixMe[deprecated-type]
107
- export type $RelayProps<Props, RelayPropT = RelayProp> = $ObjMap<
108
- $Diff<Props, { relay: RelayPropT | void, ... }>,
109
- & (<T: { +$fragmentType: empty, ... }>( T) => T)
110
- & (<T: { +$fragmentType: empty, ... }>(?T) => ?T)
111
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>( T ) => $FragmentRef<T> )
112
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>(? T ) => ? $FragmentRef<T> )
113
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>( $ReadOnlyArray< T>) => $ReadOnlyArray< $FragmentRef<T>>)
114
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>(?$ReadOnlyArray< T>) => ?$ReadOnlyArray< $FragmentRef<T>>)
115
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>( $ReadOnlyArray<?T>) => $ReadOnlyArray<?$FragmentRef<T>>)
116
- & (<TFragmentType: FragmentType, T: { +$fragmentType: TFragmentType, ... }>(?$ReadOnlyArray<?T>) => ?$ReadOnlyArray<?$FragmentRef<T>>)
117
- & (<T>(T) => T),
106
+ export type $RelayProps<Props, RelayPropT = RelayProp> = MapRelayProps<
107
+ $Diff<Props, {relay: RelayPropT | void, ...}>,
118
108
  >;
119
109
 
120
- export type RelayFragmentContainer<TComponent> = React$ComponentType<
121
- $RelayProps<React$ElementConfig<TComponent>, RelayProp>,
110
+ type MapRelayProps<Props> = {[K in keyof Props]: MapRelayProp<Props[K]>};
111
+ type MapRelayProp<T> = [+t: T] extends [+t: {+$fragmentType: empty, ...}]
112
+ ? T
113
+ : [+t: T] extends [+t: ?{+$fragmentType: empty, ...}]
114
+ ? ?T
115
+ : [+t: T] extends [+t: {+$fragmentType: FragmentType, ...}]
116
+ ? $FragmentRef<T>
117
+ : [+t: T] extends [+t: ?{+$fragmentType: FragmentType, ...}]
118
+ ? ?$FragmentRef<$NonMaybeType<T>>
119
+ : [+t: T] extends [
120
+ +t: $ReadOnlyArray<
121
+ infer V extends {+$fragmentType: FragmentType, ...},
122
+ >,
123
+ ]
124
+ ? $ReadOnlyArray<$FragmentRef<V>>
125
+ : [+t: T] extends [
126
+ +t: ?$ReadOnlyArray<
127
+ infer V extends {+$fragmentType: FragmentType, ...},
128
+ >,
129
+ ]
130
+ ? ?$ReadOnlyArray<$FragmentRef<V>>
131
+ : [+t: T] extends [
132
+ +t: $ReadOnlyArray<?infer V extends {
133
+ +$fragmentType: FragmentType,
134
+ ...
135
+ }>,
136
+ ]
137
+ ? $ReadOnlyArray<?$FragmentRef<$NonMaybeType<V>>>
138
+ : [+t: T] extends [
139
+ +t: ?$ReadOnlyArray<?infer V extends {
140
+ +$fragmentType: FragmentType,
141
+ ...
142
+ }>,
143
+ ]
144
+ ? ?$ReadOnlyArray<?$FragmentRef<$NonMaybeType<V>>>
145
+ : T;
146
+
147
+ export type RelayFragmentContainer<TComponent> = React.ComponentType<
148
+ $RelayProps<React.ElementConfig<TComponent>, RelayProp>,
122
149
  >;
123
150
 
124
- export type RelayPaginationContainer<TComponent> = React$ComponentType<
125
- $RelayProps<React$ElementConfig<TComponent>, RelayPaginationProp>,
151
+ export type RelayPaginationContainer<TComponent> = React.ComponentType<
152
+ $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
126
153
  >;
127
154
 
128
- export type RelayRefetchContainer<TComponent> = React$ComponentType<
129
- $RelayProps<React$ElementConfig<TComponent>, RelayRefetchProp>,
155
+ export type RelayRefetchContainer<TComponent> = React.ComponentType<
156
+ $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
130
157
  >;
@@ -50,7 +50,7 @@ class BarComponent extends React.Component<{
50
50
  getNum(): number {
51
51
  return 42;
52
52
  }
53
- render(): React.Element<'div'> {
53
+ render(): React.MixedElement {
54
54
  const reqLen = this.props.requiredProp.length;
55
55
  const optionalProp = this.props.optionalProp;
56
56
 
@@ -137,7 +137,7 @@ module.exports = {
137
137
  /** $FlowExpectedError: Bar `getNum` gives number, but `getString` assumes string **/
138
138
  return bad ? 'not good' : ok;
139
139
  }
140
- render(): React.Element<typeof Bar> {
140
+ render(): React.MixedElement {
141
141
  return (
142
142
  <Bar
143
143
  componentRef={(ref: empty) => {
@@ -28,15 +28,15 @@ const {getFragment} = require('relay-runtime');
28
28
  const {useContext} = React;
29
29
 
30
30
  type ContainerCreator = (
31
- Component: React$ComponentType<any>,
31
+ Component: React.ComponentType<any>,
32
32
  fragments: FragmentMap,
33
- ) => React$ComponentType<any>;
33
+ ) => React.ComponentType<any>;
34
34
 
35
35
  /**
36
36
  * Helper to create the Relay HOCs with ref forwarding, setting the displayName
37
37
  * and reading the React context.
38
38
  */
39
- function buildReactRelayContainer<TBase: React$ComponentType<any>>(
39
+ function buildReactRelayContainer<TBase: React.ComponentType<any>>(
40
40
  ComponentClass: TBase,
41
41
  fragmentSpec: GeneratedNodeMap,
42
42
  createContainerWithFragments: ContainerCreator,
@@ -55,8 +55,8 @@ function buildReactRelayContainer<TBase: React$ComponentType<any>>(
55
55
  function ForwardRef(
56
56
  props: any,
57
57
  ref:
58
- | ((null | React$ElementRef<TBase>) => mixed)
59
- | {-current: null | React$ElementRef<TBase>, ...},
58
+ | ((null | React.ElementRef<TBase>) => mixed)
59
+ | {-current: null | React.ElementRef<TBase>, ...},
60
60
  ) {
61
61
  // $FlowFixMe[react-rule-hook]
62
62
  const context = useContext(ReactRelayContext);
package/hooks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v17.0.0
2
+ * Relay v18.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v17.0.0
2
+ * Relay v18.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/legacy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v17.0.0
2
+ * Relay v18.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -16,11 +16,14 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
16
16
  if (queries != null) {
17
17
  var queriesPropNames = Object.keys(queries);
18
18
  queriesPropNames.forEach(function (queryPropName) {
19
- var _queries$queryPropNam = queries[queryPropName],
20
- environmentProviderOptions = _queries$queryPropNam.environmentProviderOptions,
21
- options = _queries$queryPropNam.options,
22
- parameters = _queries$queryPropNam.parameters,
23
- variables = _queries$queryPropNam.variables;
19
+ var query = queries[queryPropName];
20
+ if (query == null) {
21
+ return;
22
+ }
23
+ var environmentProviderOptions = query.environmentProviderOptions,
24
+ options = query.options,
25
+ parameters = query.parameters,
26
+ variables = query.variables;
24
27
  var environment = environmentProvider.getEnvironment(environmentProviderOptions);
25
28
  preloadedQueries[queryPropName] = loadQuery(environment, parameters, variables, {
26
29
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
@@ -3,7 +3,6 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
4
  var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
5
5
  var invariant = require('invariant');
6
- var React = require('react');
7
6
  var _require = require('relay-runtime'),
8
7
  fetchQueryDeduped = _require.__internal.fetchQueryDeduped,
9
8
  Observable = _require.Observable,
@@ -13,19 +12,9 @@ var _require = require('relay-runtime'),
13
12
  createOperationDescriptor = _require.createOperationDescriptor,
14
13
  getRequest = _require.getRequest,
15
14
  getRequestIdentifier = _require.getRequestIdentifier;
16
- var warning = require("fbjs/lib/warning");
17
- var RenderDispatcher = null;
18
15
  var fetchKey = 100001;
19
- function useTrackLoadQueryInRender() {
20
- if (RenderDispatcher === null) {
21
- var _React$__SECRET_INTER, _React$__SECRET_INTER2;
22
- RenderDispatcher = (_React$__SECRET_INTER = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER === void 0 ? void 0 : (_React$__SECRET_INTER2 = _React$__SECRET_INTER.ReactCurrentDispatcher) === null || _React$__SECRET_INTER2 === void 0 ? void 0 : _React$__SECRET_INTER2.current;
23
- }
24
- }
25
16
  function loadQuery(environment, preloadableRequest, variables, options, environmentProviderOptions) {
26
- var _React$__SECRET_INTER3, _React$__SECRET_INTER4, _options$__nameForWar, _options$fetchPolicy;
27
- var CurrentDispatcher = (_React$__SECRET_INTER3 = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED) === null || _React$__SECRET_INTER3 === void 0 ? void 0 : (_React$__SECRET_INTER4 = _React$__SECRET_INTER3.ReactCurrentDispatcher) === null || _React$__SECRET_INTER4 === void 0 ? void 0 : _React$__SECRET_INTER4.current;
28
- process.env.NODE_ENV !== "production" ? warning(RenderDispatcher == null || CurrentDispatcher !== RenderDispatcher, 'Relay: `%s` should not be called inside a React render function.', (_options$__nameForWar = options === null || options === void 0 ? void 0 : options.__nameForWarning) !== null && _options$__nameForWar !== void 0 ? _options$__nameForWar : 'loadQuery') : void 0;
17
+ var _options$fetchPolicy;
29
18
  fetchKey++;
30
19
  var fetchPolicy = (_options$fetchPolicy = options === null || options === void 0 ? void 0 : options.fetchPolicy) !== null && _options$fetchPolicy !== void 0 ? _options$fetchPolicy : 'store-or-network';
31
20
  var networkCacheConfig = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, options === null || options === void 0 ? void 0 : options.networkCacheConfig), {}, {
@@ -201,6 +190,5 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
201
190
  };
202
191
  }
203
192
  module.exports = {
204
- loadQuery: loadQuery,
205
- useTrackLoadQueryInRender: useTrackLoadQueryInRender
193
+ loadQuery: loadQuery
206
194
  };
@@ -3,20 +3,17 @@
3
3
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
4
4
  var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
5
5
  var loadEntryPoint = require('./loadEntryPoint');
6
- var _require = require('./loadQuery'),
7
- useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
8
6
  var useIsMountedRef = require('./useIsMountedRef');
9
- var _require2 = require('react'),
10
- useCallback = _require2.useCallback,
11
- useEffect = _require2.useEffect,
12
- useRef = _require2.useRef,
13
- useState = _require2.useState;
7
+ var _require = require('react'),
8
+ useCallback = _require.useCallback,
9
+ useEffect = _require.useEffect,
10
+ useRef = _require.useRef,
11
+ useState = _require.useState;
14
12
  var initialNullEntryPointReferenceState = {
15
13
  kind: 'NullEntryPointReference'
16
14
  };
17
15
  function useLoadEntryPoint(environmentProvider, entryPoint, options) {
18
16
  var _options$TEST_ONLY__i, _options$TEST_ONLY__i2, _options$TEST_ONLY__i3, _options$TEST_ONLY__i4;
19
- useTrackLoadQueryInRender();
20
17
  var initialEntryPointReferenceInternal = (_options$TEST_ONLY__i = options === null || options === void 0 ? void 0 : (_options$TEST_ONLY__i2 = options.TEST_ONLY__initialEntryPointData) === null || _options$TEST_ONLY__i2 === void 0 ? void 0 : _options$TEST_ONLY__i2.entryPointReference) !== null && _options$TEST_ONLY__i !== void 0 ? _options$TEST_ONLY__i : initialNullEntryPointReferenceState;
21
18
  var initialEntryPointParamsInternal = (_options$TEST_ONLY__i3 = options === null || options === void 0 ? void 0 : (_options$TEST_ONLY__i4 = options.TEST_ONLY__initialEntryPointData) === null || _options$TEST_ONLY__i4 === void 0 ? void 0 : _options$TEST_ONLY__i4.entryPointParams) !== null && _options$TEST_ONLY__i3 !== void 0 ? _options$TEST_ONLY__i3 : null;
22
19
  var isMountedRef = useIsMountedRef();
@@ -1,15 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var _require = require('./loadQuery'),
4
- useTrackLoadQueryInRender = _require.useTrackLoadQueryInRender;
5
3
  var useFragmentInternal = require('./useFragmentInternal');
6
4
  var useStaticFragmentNodeWarning = require('./useStaticFragmentNodeWarning');
7
- var _require2 = require('react'),
8
- useDebugValue = _require2.useDebugValue;
9
- var _require3 = require('relay-runtime'),
10
- getFragment = _require3.getFragment;
5
+ var _require = require('react'),
6
+ useDebugValue = _require.useDebugValue;
7
+ var _require2 = require('relay-runtime'),
8
+ getFragment = _require2.getFragment;
11
9
  function useFragment(fragment, key) {
12
- useTrackLoadQueryInRender();
13
10
  var fragmentNode = getFragment(fragment);
14
11
  useStaticFragmentNodeWarning(fragmentNode, 'first argument of useFragment()');
15
12
  var data = useFragmentInternal(fragmentNode, key, 'useFragment()');