react-relay 18.2.0 → 19.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 (67) hide show
  1. package/ReactRelayContainerUtils.js.flow +2 -2
  2. package/ReactRelayContext.js +1 -1
  3. package/ReactRelayFragmentContainer.js.flow +5 -7
  4. package/ReactRelayLoggingContext.js.flow +21 -0
  5. package/ReactRelayPaginationContainer.js.flow +8 -8
  6. package/ReactRelayRefetchContainer.js.flow +8 -8
  7. package/ReactRelayTypes.js.flow +18 -11
  8. package/__flowtests__/ReactRelayFragmentContainer-flowtest.js.flow +1 -8
  9. package/__flowtests__/ReactRelayPaginationContainer-flowtest.js.flow +2 -5
  10. package/__flowtests__/ReactRelayRefetchContainer-flowtest.js.flow +2 -5
  11. package/buildReactRelayContainer.js.flow +3 -3
  12. package/hooks.js +1 -1
  13. package/index.js +1 -1
  14. package/index.js.flow +3 -3
  15. package/legacy.js +1 -1
  16. package/lib/ReactRelayLoggingContext.js +6 -0
  17. package/lib/index.js +2 -2
  18. package/lib/relay-hooks/legacy/FragmentResource.js +3 -3
  19. package/lib/relay-hooks/legacy/useRefetchableFragmentNode.js +1 -1
  20. package/lib/relay-hooks/loadEntryPoint.js +3 -0
  21. package/lib/relay-hooks/loadQuery.js +5 -3
  22. package/lib/relay-hooks/preloadQuery_DEPRECATED.js +7 -2
  23. package/lib/relay-hooks/readFragmentInternal.js +2 -2
  24. package/lib/relay-hooks/useFragmentInternal_CURRENT.js +11 -6
  25. package/lib/relay-hooks/useFragmentInternal_EXPERIMENTAL.js +11 -6
  26. package/lib/relay-hooks/useLoadMoreFunction.js +3 -2
  27. package/lib/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js +3 -2
  28. package/lib/relay-hooks/usePaginationFragment.js +5 -1
  29. package/lib/relay-hooks/usePrefetchableForwardPaginationFragment.js +228 -0
  30. package/lib/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js +8 -8
  31. package/lib/relay-hooks/useRefetchableFragmentInternal.js +3 -3
  32. package/lib/relay-hooks/useRelayLoggingContext.js +9 -0
  33. package/package.json +3 -3
  34. package/relay-hooks/EntryPointContainer.react.js.flow +13 -17
  35. package/relay-hooks/EntryPointTypes.flow.js.flow +6 -4
  36. package/relay-hooks/MatchContainer.js.flow +1 -1
  37. package/relay-hooks/legacy/FragmentResource.js.flow +3 -6
  38. package/relay-hooks/legacy/useBlockingPaginationFragment.js.flow +2 -17
  39. package/relay-hooks/legacy/useRefetchableFragmentNode.js.flow +1 -1
  40. package/relay-hooks/loadEntryPoint.js.flow +6 -0
  41. package/relay-hooks/loadQuery.js.flow +18 -2
  42. package/relay-hooks/preloadQuery_DEPRECATED.js.flow +18 -3
  43. package/relay-hooks/readFragmentInternal.js.flow +2 -5
  44. package/relay-hooks/useEntryPointLoader.js.flow +4 -2
  45. package/relay-hooks/useFragment.js.flow +1 -0
  46. package/relay-hooks/useFragmentInternal.js.flow +2 -0
  47. package/relay-hooks/useFragmentInternal_CURRENT.js.flow +22 -5
  48. package/relay-hooks/useFragmentInternal_EXPERIMENTAL.js.flow +24 -5
  49. package/relay-hooks/useLazyLoadQuery.js.flow +4 -4
  50. package/relay-hooks/useLoadMoreFunction.js.flow +7 -7
  51. package/relay-hooks/useLoadMoreFunction_EXPERIMENTAL.js.flow +5 -7
  52. package/relay-hooks/usePaginationFragment.js.flow +6 -10
  53. package/relay-hooks/usePrefetchableForwardPaginationFragment.js.flow +436 -0
  54. package/relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL.js.flow +15 -13
  55. package/relay-hooks/usePreloadedQuery.js.flow +1 -0
  56. package/relay-hooks/useQueryLoader.js.flow +5 -1
  57. package/relay-hooks/useQueryLoader_EXPERIMENTAL.js.flow +3 -1
  58. package/relay-hooks/useRefetchableFragment.js.flow +1 -0
  59. package/relay-hooks/useRefetchableFragmentInternal.js.flow +3 -3
  60. package/relay-hooks/useRelayLoggingContext.js.flow +21 -0
  61. package/relay-hooks/useStaticFragmentNodeWarning.js.flow +1 -0
  62. package/react-relay-hooks.js +0 -4
  63. package/react-relay-hooks.min.js +0 -9
  64. package/react-relay-legacy.js +0 -4
  65. package/react-relay-legacy.min.js +0 -9
  66. package/react-relay.js +0 -4
  67. package/react-relay.min.js +0 -9
@@ -11,11 +11,11 @@
11
11
 
12
12
  'use strict';
13
13
 
14
- function getComponentName(component: React.ComponentType<any>): string {
14
+ function getComponentName(component: component(...empty)): 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: component(...empty)): string {
19
19
  return 'Relay(' + getComponentName(Component) + ')';
20
20
  }
21
21
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v18.2.0
2
+ * Relay v19.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -46,13 +46,11 @@ type ContainerState = {
46
46
  */
47
47
  function createContainerWithFragments<
48
48
  Props: {...},
49
- TComponent: React.ComponentType<Props>,
49
+ TComponent: component(...Props),
50
50
  >(
51
51
  Component: TComponent,
52
52
  fragments: FragmentMap,
53
- ): React.ComponentType<
54
- $RelayProps<React.ElementConfig<TComponent>, RelayProp>,
55
- > {
53
+ ): component(...$RelayProps<React.ElementConfig<TComponent>, RelayProp>) {
56
54
  const containerName = getContainerName(Component);
57
55
 
58
56
  return class extends React.Component<ContainerProps, ContainerState> {
@@ -269,12 +267,12 @@ function getRelayProp(environment: IEnvironment) {
269
267
  */
270
268
  function createContainer<
271
269
  Props: {...},
272
- Instance,
273
- TComponent: component(ref: React.RefSetter<Instance>, ...Props),
270
+ Ref,
271
+ TComponent: component(ref: Ref, ...Props),
274
272
  >(
275
273
  Component: TComponent,
276
274
  fragmentSpec: GeneratedNodeMap,
277
- ): component(ref: React.RefSetter<Instance>, ...$RelayProps<Props, RelayProp>) {
275
+ ): component(ref: Ref, ...$RelayProps<Props, RelayProp>) {
278
276
  // $FlowFixMe[incompatible-return]
279
277
  return buildReactRelayContainer(
280
278
  Component,
@@ -0,0 +1,21 @@
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
+ const React = require('react');
15
+ const {
16
+ __internal: {createRelayLoggingContext},
17
+ } = require('relay-runtime');
18
+
19
+ module.exports = (createRelayLoggingContext(React): React.Context<
20
+ mixed | null,
21
+ >);
@@ -319,14 +319,14 @@ function toObserver(observerOrCallback: ?ObserverOrCallback): Observer<void> {
319
319
 
320
320
  function createContainerWithFragments<
321
321
  Props: {...},
322
- TComponent: React.ComponentType<Props>,
322
+ TComponent: component(...Props),
323
323
  >(
324
324
  Component: TComponent,
325
325
  fragments: FragmentMap,
326
326
  connectionConfig: ConnectionConfig,
327
- ): React.ComponentType<
328
- $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
329
- > {
327
+ ): component(
328
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
329
+ ) {
330
330
  const componentName = getComponentName(Component);
331
331
  const containerName = getContainerName(Component);
332
332
 
@@ -937,13 +937,13 @@ function createContainerWithFragments<
937
937
  * `fragmentSpec` is memoized once per environment, rather than once per
938
938
  * instance of the container constructed/rendered.
939
939
  */
940
- function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
940
+ function createContainer<Props: {...}, TComponent: component(...Props)>(
941
941
  Component: TComponent,
942
942
  fragmentSpec: GeneratedNodeMap,
943
943
  connectionConfig: ConnectionConfig,
944
- ): React.ComponentType<
945
- $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
946
- > {
944
+ ): component(
945
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
946
+ ) {
947
947
  // $FlowFixMe[incompatible-return]
948
948
  return buildReactRelayContainer(
949
949
  Component,
@@ -69,14 +69,14 @@ type ContainerState = {
69
69
  */
70
70
  function createContainerWithFragments<
71
71
  Props: {...},
72
- TComponent: React.ComponentType<Props>,
72
+ TComponent: component(...Props),
73
73
  >(
74
74
  Component: TComponent,
75
75
  fragments: FragmentMap,
76
76
  taggedNode: GraphQLTaggedNode,
77
- ): React.ComponentType<
78
- $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
79
- > {
77
+ ): component(
78
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
79
+ ) {
80
80
  const containerName = getContainerName(Component);
81
81
 
82
82
  return class extends React.Component<ContainerProps, ContainerState> {
@@ -486,13 +486,13 @@ function getRelayProp(
486
486
  * `fragmentSpec` is memoized once per environment, rather than once per
487
487
  * instance of the container constructed/rendered.
488
488
  */
489
- function createContainer<Props: {...}, TComponent: React.ComponentType<Props>>(
489
+ function createContainer<Props: {...}, TComponent: component(...Props)>(
490
490
  Component: TComponent,
491
491
  fragmentSpec: GeneratedNodeMap,
492
492
  taggedNode: GraphQLTaggedNode,
493
- ): React.ComponentType<
494
- $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
495
- > {
493
+ ): component(
494
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
495
+ ) {
496
496
  // $FlowFixMe[incompatible-return]
497
497
  return buildReactRelayContainer(
498
498
  Component,
@@ -97,14 +97,20 @@ export type $FragmentRef<T> = {
97
97
  ...
98
98
  };
99
99
 
100
+ /* $FlowExpectedError[unclear-type]: Intentional so that it won't fail,
101
+ * even if the type we want to exclude doesn't exist in Props */
102
+ type LooseOmitRelayProps<Props, K: $Keys<any>> = Pick<
103
+ Props,
104
+ Exclude<$Keys<Props>, K>,
105
+ >;
100
106
  /**
101
107
  * A utility type that takes the Props of a component and the type of
102
108
  * `props.relay` and returns the props of the container.
103
109
  */
104
110
  // prettier-ignore
105
111
  // $FlowFixMe[extra-type-arg] xplat redux flow type error
106
- export type $RelayProps<Props, RelayPropT = RelayProp> = MapRelayProps<
107
- $Diff<Props, {relay: RelayPropT | void, ...}>,
112
+ export type $RelayProps<Props, _RelayPropT = RelayProp> = MapRelayProps<
113
+ LooseOmitRelayProps<Props, 'relay'>,
108
114
  >;
109
115
 
110
116
  type MapRelayProps<Props> = {[K in keyof Props]: MapRelayProp<Props[K]>};
@@ -144,14 +150,15 @@ type MapRelayProp<T> = [+t: T] extends [+t: {+$fragmentType: empty, ...}]
144
150
  ? ?$ReadOnlyArray<?$FragmentRef<$NonMaybeType<V>>>
145
151
  : T;
146
152
 
147
- export type RelayFragmentContainer<TComponent> = React.ComponentType<
148
- $RelayProps<React.ElementConfig<TComponent>, RelayProp>,
149
- >;
153
+ export type RelayFragmentContainer<TComponent: component(...empty)> = component(
154
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayProp>
155
+ );
150
156
 
151
- export type RelayPaginationContainer<TComponent> = React.ComponentType<
152
- $RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>,
153
- >;
157
+ export type RelayPaginationContainer<TComponent: component(...empty)> =
158
+ component(
159
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayPaginationProp>
160
+ );
154
161
 
155
- export type RelayRefetchContainer<TComponent> = React.ComponentType<
156
- $RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>,
157
- >;
162
+ export type RelayRefetchContainer<TComponent: component(...empty)> = component(
163
+ ...$RelayProps<React.ElementConfig<TComponent>, RelayRefetchProp>
164
+ );
@@ -138,14 +138,7 @@ module.exports = {
138
138
  return bad ? 'not good' : ok;
139
139
  }
140
140
  render(): React.MixedElement {
141
- return (
142
- <Bar
143
- componentRef={(ref: empty) => {
144
- this._barRef = (ref: empty);
145
- }}
146
- requiredProp="bar"
147
- />
148
- );
141
+ return <Bar requiredProp="bar" />;
149
142
  }
150
143
  }
151
144
  return <ProxyChecker />;
@@ -22,10 +22,7 @@ const {graphql} = require('relay-runtime');
22
22
  * type-checked correctly on Relay components.
23
23
  */
24
24
 
25
- /* $FlowFixMe(>=0.53.0) This comment suppresses an error
26
- * when upgrading Flow's support for React. Common errors found when upgrading
27
- * Flow's React support are documented at https://fburl.com/eq7bs81w */
28
- class FooComponent extends React.Component {
25
+ class FooComponent extends React.Component<$FlowFixMe> {
29
26
  props: {
30
27
  optionalProp?: {foo: number, ...},
31
28
  defaultProp: string,
@@ -56,7 +53,7 @@ class FooComponent extends React.Component {
56
53
  }
57
54
  // Note that we must reassign to a new identifier to make sure flow doesn't propogate types without
58
55
  // the relay type definition doing the work.
59
- const Foo = createPaginationContainer(
56
+ const Foo = createPaginationContainer<$FlowFixMe, _>(
60
57
  FooComponent,
61
58
  {
62
59
  viewer: graphql`
@@ -21,10 +21,7 @@ const {graphql} = require('relay-runtime');
21
21
  * Verifies that normal prop type checking works correctly on Relay components.
22
22
  */
23
23
 
24
- /* $FlowFixMe(>=0.53.0) This comment suppresses an error
25
- * when upgrading Flow's support for React. Common errors found when upgrading
26
- * Flow's React support are documented at https://fburl.com/eq7bs81w */
27
- class FooComponent extends React.Component {
24
+ class FooComponent extends React.Component<$FlowFixMe> {
28
25
  props: {
29
26
  optionalProp?: {foo: number, ...},
30
27
  defaultProp: string,
@@ -55,7 +52,7 @@ class FooComponent extends React.Component {
55
52
  }
56
53
  // Note that we must reassign to a new identifier to make sure flow doesn't propogate types without
57
54
  // the relay type definition doing the work.
58
- const Foo = createRefetchContainer(
55
+ const Foo = createRefetchContainer<$FlowFixMe, _>(
59
56
  FooComponent,
60
57
  {
61
58
  viewer: graphql`
@@ -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: component(...any),
32
32
  fragments: FragmentMap,
33
- ) => React.ComponentType<any>;
33
+ ) => component(...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: component(...empty)>(
40
40
  ComponentClass: TBase,
41
41
  fragmentSpec: GeneratedNodeMap,
42
42
  createContainerWithFragments: ContainerCreator,
package/hooks.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v18.2.0
2
+ * Relay v19.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 v18.2.0
2
+ * Relay v19.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
package/index.js.flow CHANGED
@@ -28,7 +28,7 @@ const useFragment = require('./relay-hooks/useFragment');
28
28
  const useLazyLoadQuery = require('./relay-hooks/useLazyLoadQuery');
29
29
  const useMutation = require('./relay-hooks/useMutation');
30
30
  const usePaginationFragment = require('./relay-hooks/usePaginationFragment');
31
- const usePrefetchableForwardPaginationFragment_EXPERIMENTAL = require('./relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL');
31
+ const usePrefetchableForwardPaginationFragment = require('./relay-hooks/usePrefetchableForwardPaginationFragment');
32
32
  const usePreloadedQuery = require('./relay-hooks/usePreloadedQuery');
33
33
  const useQueryLoader = require('./relay-hooks/useQueryLoader');
34
34
  const useRefetchableFragment = require('./relay-hooks/useRefetchableFragment');
@@ -126,8 +126,8 @@ module.exports = {
126
126
  usePaginationFragment: usePaginationFragment,
127
127
  usePreloadedQuery: usePreloadedQuery,
128
128
  useRefetchableFragment: useRefetchableFragment,
129
- usePrefetchableForwardPaginationFragment_EXPERIMENTAL:
130
- usePrefetchableForwardPaginationFragment_EXPERIMENTAL,
129
+ usePrefetchableForwardPaginationFragment:
130
+ usePrefetchableForwardPaginationFragment,
131
131
  useRelayEnvironment: useRelayEnvironment,
132
132
  useSubscribeToInvalidationState: useSubscribeToInvalidationState,
133
133
  useSubscription: useSubscription,
package/legacy.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Relay v18.2.0
2
+ * Relay v19.0.0
3
3
  *
4
4
  * Copyright (c) Meta Platforms, Inc. and affiliates.
5
5
  *
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var _require = require('relay-runtime'),
5
+ createRelayLoggingContext = _require.__internal.createRelayLoggingContext;
6
+ module.exports = createRelayLoggingContext(React);
package/lib/index.js CHANGED
@@ -18,7 +18,7 @@ var useFragment = require('./relay-hooks/useFragment');
18
18
  var useLazyLoadQuery = require('./relay-hooks/useLazyLoadQuery');
19
19
  var useMutation = require('./relay-hooks/useMutation');
20
20
  var usePaginationFragment = require('./relay-hooks/usePaginationFragment');
21
- var usePrefetchableForwardPaginationFragment_EXPERIMENTAL = require('./relay-hooks/usePrefetchableForwardPaginationFragment_EXPERIMENTAL');
21
+ var usePrefetchableForwardPaginationFragment = require('./relay-hooks/usePrefetchableForwardPaginationFragment');
22
22
  var usePreloadedQuery = require('./relay-hooks/usePreloadedQuery');
23
23
  var useQueryLoader = require('./relay-hooks/useQueryLoader');
24
24
  var useRefetchableFragment = require('./relay-hooks/useRefetchableFragment');
@@ -58,7 +58,7 @@ module.exports = {
58
58
  usePaginationFragment: usePaginationFragment,
59
59
  usePreloadedQuery: usePreloadedQuery,
60
60
  useRefetchableFragment: useRefetchableFragment,
61
- usePrefetchableForwardPaginationFragment_EXPERIMENTAL: usePrefetchableForwardPaginationFragment_EXPERIMENTAL,
61
+ usePrefetchableForwardPaginationFragment: usePrefetchableForwardPaginationFragment,
62
62
  useRelayEnvironment: useRelayEnvironment,
63
63
  useSubscribeToInvalidationState: useSubscribeToInvalidationState,
64
64
  useSubscription: useSubscription
@@ -308,10 +308,10 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
308
308
  var _this4 = this;
309
309
  if (Array.isArray(snapshot)) {
310
310
  snapshot.forEach(function (s) {
311
- handlePotentialSnapshotErrors(_this4._environment, s.errorResponseFields);
311
+ handlePotentialSnapshotErrors(_this4._environment, s.fieldErrors);
312
312
  });
313
313
  } else {
314
- handlePotentialSnapshotErrors(this._environment, snapshot.errorResponseFields);
314
+ handlePotentialSnapshotErrors(this._environment, snapshot.fieldErrors);
315
315
  }
316
316
  };
317
317
  _proto2.readSpec = function readSpec(fragmentNodes, fragmentRefs, componentDisplayName) {
@@ -453,7 +453,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
453
453
  missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
454
454
  seenRecords: currentSnapshot.seenRecords,
455
455
  selector: currentSnapshot.selector,
456
- errorResponseFields: currentSnapshot.errorResponseFields
456
+ fieldErrors: currentSnapshot.fieldErrors
457
457
  };
458
458
  if (updatedData !== renderData) {
459
459
  var _result = getFragmentResult(cacheKey, updatedCurrentSnapshot, storeEpoch);
@@ -234,7 +234,7 @@ if (process.env.NODE_ENV !== "production") {
234
234
  }
235
235
  },
236
236
  checkSameIDAfterRefetch: function checkSameIDAfterRefetch(previousIDAndTypename, refetchedFragmentRef, fragmentNode, componentDisplayName) {
237
- if (previousIDAndTypename == null) {
237
+ if (previousIDAndTypename == null || refetchedFragmentRef == null) {
238
238
  return;
239
239
  }
240
240
  var _require7 = require('relay-runtime'),
@@ -24,6 +24,9 @@ function loadEntryPoint(environmentProvider, entryPoint, entryPointParams) {
24
24
  options = query.options,
25
25
  parameters = query.parameters,
26
26
  variables = query.variables;
27
+ if ((options === null || options === void 0 ? void 0 : options.includeIf) === false) {
28
+ return;
29
+ }
27
30
  var environment = environmentProvider.getEnvironment(environmentProviderOptions);
28
31
  preloadedQueries[queryPropName] = loadQuery(environment, parameters, variables, {
29
32
  fetchPolicy: options === null || options === void 0 ? void 0 : options.fetchPolicy,
@@ -35,13 +35,13 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
35
35
  var unsubscribeFromNetworkRequest;
36
36
  var networkError = null;
37
37
  var didMakeNetworkRequest = false;
38
- var makeNetworkRequest = function makeNetworkRequest(params) {
38
+ var makeNetworkRequest = function makeNetworkRequest(params, checkOperation) {
39
39
  didMakeNetworkRequest = true;
40
40
  var subject = new ReplaySubject();
41
41
  var identifier = 'raw-network-request-' + getRequestIdentifier(params, variables);
42
42
  var observable = fetchQueryDeduped(environment, identifier, function () {
43
43
  var network = environment.getNetwork();
44
- return network.execute(params, variables, networkCacheConfig);
44
+ return network.execute(params, variables, networkCacheConfig, undefined, undefined, undefined, undefined, checkOperation);
45
45
  });
46
46
  var _observable$subscribe = observable.subscribe({
47
47
  error: function error(err) {
@@ -90,7 +90,9 @@ function loadQuery(environment, preloadableRequest, variables, options, environm
90
90
  var shouldFetch = fetchPolicy !== 'store-or-network' || environment.check(operation).status !== 'available';
91
91
  if (shouldFetch) {
92
92
  executeDeduped(operation, function () {
93
- var networkObservable = makeNetworkRequest(concreteRequest.params);
93
+ var networkObservable = makeNetworkRequest(concreteRequest.params, function () {
94
+ return environment.check(operation);
95
+ });
94
96
  var executeObservable = executeWithNetworkSource(operation, networkObservable);
95
97
  return executeObservable;
96
98
  });
@@ -78,7 +78,12 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
78
78
  }, options === null || options === void 0 ? void 0 : options.networkCacheConfig);
79
79
  var cacheKey = "".concat(getRequestIdentifier(params, variables)).concat(fetchKey != null ? "-".concat(fetchKey) : '');
80
80
  var prevQueryEntry = pendingQueries.get(cacheKey);
81
- var availability = fetchPolicy === STORE_OR_NETWORK_DEFAULT && query != null && query != null ? environment.check(createOperationDescriptor(query, variables, networkCacheConfig)) : {
81
+ function checkOperation() {
82
+ return query != null ? environment.check(createOperationDescriptor(query, variables, networkCacheConfig)) : {
83
+ status: 'missing'
84
+ };
85
+ }
86
+ var availability = fetchPolicy === STORE_OR_NETWORK_DEFAULT ? checkOperation() : {
82
87
  status: 'missing'
83
88
  };
84
89
  var nextQueryEntry;
@@ -105,7 +110,7 @@ function preloadQueryDeduped(environment, pendingQueries, preloadableRequest, va
105
110
  }, DEFAULT_PREFETCH_TIMEOUT);
106
111
  }
107
112
  } else if (prevQueryEntry == null || prevQueryEntry.kind !== 'network') {
108
- var source = network.execute(params, variables, networkCacheConfig, null);
113
+ var source = network.execute(params, variables, networkCacheConfig, null, undefined, undefined, undefined, checkOperation);
109
114
  var subject = new ReplaySubject();
110
115
  nextQueryEntry = {
111
116
  cacheKey: cacheKey,
@@ -66,14 +66,14 @@ function getMissingClientEdges(state) {
66
66
  }
67
67
  function handlePotentialSnapshotErrorsForState(environment, state) {
68
68
  if (state.kind === 'singular') {
69
- handlePotentialSnapshotErrors(environment, state.snapshot.errorResponseFields);
69
+ handlePotentialSnapshotErrors(environment, state.snapshot.fieldErrors);
70
70
  } else if (state.kind === 'plural') {
71
71
  var _iterator3 = (0, _createForOfIteratorHelper2["default"])(state.snapshots),
72
72
  _step3;
73
73
  try {
74
74
  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
75
75
  var snapshot = _step3.value;
76
- handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
76
+ handlePotentialSnapshotErrors(environment, snapshot.fieldErrors);
77
77
  }
78
78
  } catch (err) {
79
79
  _iterator3.e(err);
@@ -7,6 +7,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
7
7
  var _require = require('./QueryResource'),
8
8
  getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
9
9
  var useRelayEnvironment = require('./useRelayEnvironment');
10
+ var useRelayLoggingContext = require('./useRelayLoggingContext');
10
11
  var invariant = require('invariant');
11
12
  var _require2 = require('react'),
12
13
  useDebugValue = _require2.useDebugValue,
@@ -114,16 +115,16 @@ function getSuspendingLiveResolver(state) {
114
115
  return missingFields;
115
116
  }
116
117
  }
117
- function handlePotentialSnapshotErrorsForState(environment, state) {
118
+ function handlePotentialSnapshotErrorsForState(environment, state, loggingContext) {
118
119
  if (state.kind === 'singular') {
119
- handlePotentialSnapshotErrors(environment, state.snapshot.errorResponseFields);
120
+ handlePotentialSnapshotErrors(environment, state.snapshot.fieldErrors, loggingContext);
120
121
  } else if (state.kind === 'plural') {
121
122
  var _iterator5 = (0, _createForOfIteratorHelper2["default"])(state.snapshots),
122
123
  _step5;
123
124
  try {
124
125
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
125
126
  var snapshot = _step5.value;
126
- handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
127
+ handlePotentialSnapshotErrors(environment, snapshot.fieldErrors, loggingContext);
127
128
  }
128
129
  } catch (err) {
129
130
  _iterator5.e(err);
@@ -150,7 +151,7 @@ function handleMissedUpdates(environment, state) {
150
151
  missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
151
152
  seenRecords: currentSnapshot.seenRecords,
152
153
  selector: currentSnapshot.selector,
153
- errorResponseFields: currentSnapshot.errorResponseFields
154
+ fieldErrors: currentSnapshot.fieldErrors
154
155
  };
155
156
  return [updatedData !== state.snapshot.data, {
156
157
  kind: 'singular',
@@ -171,7 +172,7 @@ function handleMissedUpdates(environment, state) {
171
172
  missingLiveResolverFields: _currentSnapshot.missingLiveResolverFields,
172
173
  seenRecords: _currentSnapshot.seenRecords,
173
174
  selector: _currentSnapshot.selector,
174
- errorResponseFields: _currentSnapshot.errorResponseFields
175
+ fieldErrors: _currentSnapshot.fieldErrors
175
176
  };
176
177
  if (_updatedData !== snapshot.data) {
177
178
  didMissUpdates = true;
@@ -309,6 +310,10 @@ function useFragmentInternal(fragmentNode, fragmentRef, hookDisplayName, queryOp
309
310
  }
310
311
  !(fragmentRef == null || isPlural && Array.isArray(fragmentRef) && fragmentRef.length === 0 || fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to receive an object where `...%s` was spread, ' + 'but the fragment reference was not found`. This is most ' + 'likely the result of:\n' + "- Forgetting to spread `%s` in `%s`'s parent's fragment.\n" + '- Conditionally fetching `%s` but unconditionally passing %s prop ' + 'to `%s`. If the parent fragment only fetches the fragment conditionally ' + '- with e.g. `@include`, `@skip`, or inside a `... on SomeType { }` ' + 'spread - then the fragment reference will not exist. ' + 'In this case, pass `null` if the conditions for evaluating the ' + 'fragment are not met (e.g. if the `@include(if)` value is false.)', fragmentNode.name, fragmentNode.name, hookDisplayName, fragmentNode.name, hookDisplayName) : invariant(false) : void 0;
311
312
  var environment = useRelayEnvironment();
313
+ var loggerContext;
314
+ if (RelayFeatureFlags.ENABLE_UI_CONTEXT_ON_RELAY_LOGGER) {
315
+ loggerContext = useRelayLoggingContext();
316
+ }
312
317
  var _useState = useState(function () {
313
318
  return getFragmentState(environment, fragmentSelector);
314
319
  }),
@@ -412,7 +417,7 @@ function useFragmentInternal(fragmentNode, fragmentRef, hookDisplayName, queryOp
412
417
  }
413
418
  }
414
419
  }
415
- handlePotentialSnapshotErrorsForState(environment, state);
420
+ handlePotentialSnapshotErrorsForState(environment, state, loggerContext);
416
421
  var hasPendingStateChanges = useRef(false);
417
422
  useEffect(function () {
418
423
  var currentState = subscribedState;
@@ -7,6 +7,7 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
7
7
  var _require = require('./QueryResource'),
8
8
  getQueryResourceForEnvironment = _require.getQueryResourceForEnvironment;
9
9
  var useRelayEnvironment = require('./useRelayEnvironment');
10
+ var useRelayLoggingContext = require('./useRelayLoggingContext');
10
11
  var invariant = require('invariant');
11
12
  var _require2 = require('react'),
12
13
  useDebugValue = _require2.useDebugValue,
@@ -114,16 +115,16 @@ function getSuspendingLiveResolver(state) {
114
115
  return missingFields;
115
116
  }
116
117
  }
117
- function handlePotentialSnapshotErrorsForState(environment, state) {
118
+ function handlePotentialSnapshotErrorsForState(environment, state, loggingContext) {
118
119
  if (state.kind === 'singular') {
119
- handlePotentialSnapshotErrors(environment, state.snapshot.errorResponseFields);
120
+ handlePotentialSnapshotErrors(environment, state.snapshot.fieldErrors, loggingContext);
120
121
  } else if (state.kind === 'plural') {
121
122
  var _iterator5 = (0, _createForOfIteratorHelper2["default"])(state.snapshots),
122
123
  _step5;
123
124
  try {
124
125
  for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
125
126
  var snapshot = _step5.value;
126
- handlePotentialSnapshotErrors(environment, snapshot.errorResponseFields);
127
+ handlePotentialSnapshotErrors(environment, snapshot.fieldErrors, loggingContext);
127
128
  }
128
129
  } catch (err) {
129
130
  _iterator5.e(err);
@@ -150,7 +151,7 @@ function handleMissedUpdates(environment, state) {
150
151
  missingLiveResolverFields: currentSnapshot.missingLiveResolverFields,
151
152
  seenRecords: currentSnapshot.seenRecords,
152
153
  selector: currentSnapshot.selector,
153
- errorResponseFields: currentSnapshot.errorResponseFields
154
+ fieldErrors: currentSnapshot.fieldErrors
154
155
  };
155
156
  return [updatedData !== state.snapshot.data, {
156
157
  kind: 'singular',
@@ -173,7 +174,7 @@ function handleMissedUpdates(environment, state) {
173
174
  missingLiveResolverFields: _currentSnapshot.missingLiveResolverFields,
174
175
  seenRecords: _currentSnapshot.seenRecords,
175
176
  selector: _currentSnapshot.selector,
176
- errorResponseFields: _currentSnapshot.errorResponseFields
177
+ fieldErrors: _currentSnapshot.fieldErrors
177
178
  };
178
179
  if (_updatedData !== snapshot.data) {
179
180
  didMissUpdates = true;
@@ -324,6 +325,10 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
324
325
  }
325
326
  !(fragmentRef == null || isPlural && Array.isArray(fragmentRef) && fragmentRef.length === 0 || fragmentSelector != null) ? process.env.NODE_ENV !== "production" ? invariant(false, 'Relay: Expected to receive an object where `...%s` was spread, ' + 'but the fragment reference was not found`. This is most ' + 'likely the result of:\n' + "- Forgetting to spread `%s` in `%s`'s parent's fragment.\n" + '- Conditionally fetching `%s` but unconditionally passing %s prop ' + 'to `%s`. If the parent fragment only fetches the fragment conditionally ' + '- with e.g. `@include`, `@skip`, or inside a `... on SomeType { }` ' + 'spread - then the fragment reference will not exist. ' + 'In this case, pass `null` if the conditions for evaluating the ' + 'fragment are not met (e.g. if the `@include(if)` value is false.)', fragmentNode.name, fragmentNode.name, hookDisplayName, fragmentNode.name, hookDisplayName) : invariant(false) : void 0;
326
327
  var environment = useRelayEnvironment();
328
+ var loggerContext;
329
+ if (RelayFeatureFlags.ENABLE_UI_CONTEXT_ON_RELAY_LOGGER) {
330
+ loggerContext = useRelayLoggingContext();
331
+ }
327
332
  var _useState = useState(function () {
328
333
  return getFragmentState(environment, fragmentSelector);
329
334
  }),
@@ -414,7 +419,7 @@ function useFragmentInternal_EXPERIMENTAL(fragmentNode, fragmentRef, hookDisplay
414
419
  }
415
420
  }
416
421
  }
417
- handlePotentialSnapshotErrorsForState(environment, state);
422
+ handlePotentialSnapshotErrorsForState(environment, state, loggerContext);
418
423
  var storeSubscriptionRef = useRef(null);
419
424
  useEffect(function () {
420
425
  var storeSubscription = storeSubscriptionRef.current;
@@ -71,6 +71,7 @@ function useLoadMoreFunction_CURRENT(args) {
71
71
  disposeFetch();
72
72
  };
73
73
  }, [disposeFetch]);
74
+ var isRequestInvalid = fragmentData == null || isParentQueryActive;
74
75
  var loadMore = useCallback(function (count, options) {
75
76
  var onComplete = options === null || options === void 0 ? void 0 : options.onComplete;
76
77
  if (isMountedRef.current !== true) {
@@ -80,7 +81,7 @@ function useLoadMoreFunction_CURRENT(args) {
80
81
  };
81
82
  }
82
83
  var fragmentSelector = getSelector(fragmentNode, fragmentRef);
83
- if (isFetchingRef.current === true || fragmentData == null || isParentQueryActive) {
84
+ if (isFetchingRef.current === true || isRequestInvalid) {
84
85
  if (fragmentSelector == null) {
85
86
  process.env.NODE_ENV !== "production" ? warning(false, 'Relay: Unexpected fetch while using a null fragment ref ' + 'for fragment `%s` in `%s`. When fetching more items, we expect ' + "initial fragment data to be non-null. Please make sure you're " + 'passing a valid fragment ref to `%s` before paginating.', fragmentNode.name, componentDisplayName, componentDisplayName) : void 0;
86
87
  }
@@ -125,7 +126,7 @@ function useLoadMoreFunction_CURRENT(args) {
125
126
  return {
126
127
  dispose: disposeFetch
127
128
  };
128
- }, [environment, identifierValue, direction, cursor, startFetch, disposeFetch, completeFetch, isFetchingRef, isParentQueryActive, fragmentData, fragmentNode.name, fragmentRef, componentDisplayName]);
129
+ }, [environment, identifierValue, direction, cursor, startFetch, disposeFetch, completeFetch, isFetchingRef, isRequestInvalid, fragmentNode.name, fragmentRef, componentDisplayName]);
129
130
  return [loadMore, hasMore, disposeFetch];
130
131
  }
131
132
  module.exports = useLoadMoreFunction;