react-relay 13.0.3 → 13.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ReactRelayContext.js +1 -1
- package/ReactRelayLocalQueryRenderer.js.flow +1 -1
- package/ReactRelayQueryRenderer.js.flow +1 -4
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow +2 -4
- package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtestQuery.graphql.js.flow +2 -4
- package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_badref.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_notref.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_user.graphql.js.flow +1 -3
- package/__flowtests__/__generated__/RelayModernFlowtest_users.graphql.js.flow +1 -3
- package/hooks.js +1 -1
- package/index.js +1 -1
- package/jest-react/internalAct.js.flow +25 -9
- package/legacy.js +1 -1
- package/lib/ReactRelayQueryRenderer.js +1 -1
- package/lib/jest-react/internalAct.js +24 -4
- package/lib/relay-hooks/FragmentResource.js +10 -13
- package/lib/relay-hooks/QueryResource.js +2 -165
- package/lib/relay-hooks/preloadQuery_DEPRECATED.js +7 -11
- package/lib/relay-hooks/react-cache/RelayReactCache.js +37 -0
- package/lib/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js +197 -0
- package/lib/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js +395 -0
- package/lib/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js +45 -0
- package/package.json +3 -3
- package/react-relay-hooks.js +2 -2
- package/react-relay-hooks.min.js +2 -2
- package/react-relay-legacy.js +2 -2
- package/react-relay-legacy.min.js +2 -2
- package/react-relay.js +2 -2
- package/react-relay.min.js +2 -2
- package/relay-hooks/FragmentResource.js.flow +17 -18
- package/relay-hooks/QueryResource.js.flow +4 -201
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_user.graphql.js.flow +1 -3
- package/relay-hooks/__flowtests__/__generated__/useFragmentFlowtest_users.graphql.js.flow +1 -3
- package/relay-hooks/preloadQuery_DEPRECATED.js.flow +7 -14
- package/relay-hooks/react-cache/RelayReactCache.js.flow +42 -0
- package/relay-hooks/react-cache/getQueryResultOrFetchQuery_REACT_CACHE.js.flow +243 -0
- package/relay-hooks/react-cache/useFragmentInternal_REACT_CACHE.js.flow +416 -0
- package/relay-hooks/react-cache/useLazyLoadQuery_REACT_CACHE.js.flow +66 -0
package/ReactRelayContext.js
CHANGED
@@ -40,7 +40,7 @@ const queryRendererContext: ReactRelayQueryRendererContextType = {
|
|
40
40
|
rootIsQueryRenderer: true,
|
41
41
|
};
|
42
42
|
|
43
|
-
function useDeepCompare<T:
|
43
|
+
function useDeepCompare<T: {...}>(value: T): T {
|
44
44
|
const latestValue = React.useRef(value);
|
45
45
|
if (!areEqual(latestValue.current, value)) {
|
46
46
|
if (__DEV__) {
|
@@ -157,10 +157,7 @@ class ReactRelayQueryRenderer extends React.Component<Props, State> {
|
|
157
157
|
}
|
158
158
|
|
159
159
|
componentDidMount() {
|
160
|
-
if (
|
161
|
-
RelayFeatureFlags.ENABLE_QUERY_RENDERER_OFFSCREEN_SUPPORT === true &&
|
162
|
-
this._maybeHiddenOrFastRefresh === true
|
163
|
-
) {
|
160
|
+
if (this._maybeHiddenOrFastRefresh === true) {
|
164
161
|
// This block only runs if the component has previously "unmounted"
|
165
162
|
// due to it being hidden by the Offscreen API, or during fast refresh.
|
166
163
|
// At this point, the current cached resource will have been disposed
|
package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<56e1daf6db87bf9886b3627a3e0d76f9>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,14 +18,12 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type ReactRelayFragmentContainerFlowtest_viewer$fragmentType: FragmentType;
|
21
|
-
export type ReactRelayFragmentContainerFlowtest_viewer$ref = ReactRelayFragmentContainerFlowtest_viewer$fragmentType;
|
22
21
|
export type ReactRelayFragmentContainerFlowtest_viewer$data = {|
|
23
22
|
+actor: ?{|
|
24
23
|
+id: string,
|
25
24
|
|},
|
26
25
|
+$fragmentType: ReactRelayFragmentContainerFlowtest_viewer$fragmentType,
|
27
26
|
|};
|
28
|
-
export type ReactRelayFragmentContainerFlowtest_viewer = ReactRelayFragmentContainerFlowtest_viewer$data;
|
29
27
|
export type ReactRelayFragmentContainerFlowtest_viewer$key = {
|
30
28
|
+$data?: ReactRelayFragmentContainerFlowtest_viewer$data,
|
31
29
|
+$fragmentSpreads: ReactRelayFragmentContainerFlowtest_viewer$fragmentType,
|
package/__flowtests__/__generated__/ReactRelayFragmentContainerFlowtest_viewer2.graphql.js.flow
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<c4fb5411e941bc7c5102499b684cf810>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,14 +18,12 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type ReactRelayFragmentContainerFlowtest_viewer2$fragmentType: FragmentType;
|
21
|
-
export type ReactRelayFragmentContainerFlowtest_viewer2$ref = ReactRelayFragmentContainerFlowtest_viewer2$fragmentType;
|
22
21
|
export type ReactRelayFragmentContainerFlowtest_viewer2$data = {|
|
23
22
|
+actor: ?{|
|
24
23
|
+id: string,
|
25
24
|
|},
|
26
25
|
+$fragmentType: ReactRelayFragmentContainerFlowtest_viewer2$fragmentType,
|
27
26
|
|};
|
28
|
-
export type ReactRelayFragmentContainerFlowtest_viewer2 = ReactRelayFragmentContainerFlowtest_viewer2$data;
|
29
27
|
export type ReactRelayFragmentContainerFlowtest_viewer2$key = {
|
30
28
|
+$data?: ReactRelayFragmentContainerFlowtest_viewer2$data,
|
31
29
|
+$fragmentSpreads: ReactRelayFragmentContainerFlowtest_viewer2$fragmentType,
|
package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtestQuery.graphql.js.flow
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<059d6a6d94da6f9b3cf43a0418ecc7b8>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -21,15 +21,13 @@ export type ReactRelayPaginationContainerFlowtestQuery$variables = {|
|
|
21
21
|
count: number,
|
22
22
|
cursor?: ?string,
|
23
23
|
|};
|
24
|
-
export type ReactRelayPaginationContainerFlowtestQueryVariables = ReactRelayPaginationContainerFlowtestQuery$variables;
|
25
24
|
export type ReactRelayPaginationContainerFlowtestQuery$data = {|
|
26
25
|
+viewer: ?{|
|
27
26
|
+$fragmentSpreads: ReactRelayPaginationContainerFlowtest_viewer$fragmentType,
|
28
27
|
|},
|
29
28
|
|};
|
30
|
-
export type ReactRelayPaginationContainerFlowtestQueryResponse = ReactRelayPaginationContainerFlowtestQuery$data;
|
31
29
|
export type ReactRelayPaginationContainerFlowtestQuery = {|
|
32
|
-
variables:
|
30
|
+
variables: ReactRelayPaginationContainerFlowtestQuery$variables,
|
33
31
|
response: ReactRelayPaginationContainerFlowtestQuery$data,
|
34
32
|
|};
|
35
33
|
*/
|
package/__flowtests__/__generated__/ReactRelayPaginationContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<86f990ee88078c49934d0f28c6c31da4>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,7 +18,6 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type ReactRelayPaginationContainerFlowtest_viewer$fragmentType: FragmentType;
|
21
|
-
export type ReactRelayPaginationContainerFlowtest_viewer$ref = ReactRelayPaginationContainerFlowtest_viewer$fragmentType;
|
22
21
|
export type ReactRelayPaginationContainerFlowtest_viewer$data = {|
|
23
22
|
+account_user: ?{|
|
24
23
|
+friends: ?{|
|
@@ -31,7 +30,6 @@ export type ReactRelayPaginationContainerFlowtest_viewer$data = {|
|
|
31
30
|
|},
|
32
31
|
+$fragmentType: ReactRelayPaginationContainerFlowtest_viewer$fragmentType,
|
33
32
|
|};
|
34
|
-
export type ReactRelayPaginationContainerFlowtest_viewer = ReactRelayPaginationContainerFlowtest_viewer$data;
|
35
33
|
export type ReactRelayPaginationContainerFlowtest_viewer$key = {
|
36
34
|
+$data?: ReactRelayPaginationContainerFlowtest_viewer$data,
|
37
35
|
+$fragmentSpreads: ReactRelayPaginationContainerFlowtest_viewer$fragmentType,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<a07bf128347274d353ab379de5eaef1f>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -21,15 +21,13 @@ export type ReactRelayRefetchContainerFlowtestQuery$variables = {|
|
|
21
21
|
count: number,
|
22
22
|
cursor?: ?string,
|
23
23
|
|};
|
24
|
-
export type ReactRelayRefetchContainerFlowtestQueryVariables = ReactRelayRefetchContainerFlowtestQuery$variables;
|
25
24
|
export type ReactRelayRefetchContainerFlowtestQuery$data = {|
|
26
25
|
+viewer: ?{|
|
27
26
|
+$fragmentSpreads: ReactRelayRefetchContainerFlowtest_viewer$fragmentType,
|
28
27
|
|},
|
29
28
|
|};
|
30
|
-
export type ReactRelayRefetchContainerFlowtestQueryResponse = ReactRelayRefetchContainerFlowtestQuery$data;
|
31
29
|
export type ReactRelayRefetchContainerFlowtestQuery = {|
|
32
|
-
variables:
|
30
|
+
variables: ReactRelayRefetchContainerFlowtestQuery$variables,
|
33
31
|
response: ReactRelayRefetchContainerFlowtestQuery$data,
|
34
32
|
|};
|
35
33
|
*/
|
package/__flowtests__/__generated__/ReactRelayRefetchContainerFlowtest_viewer.graphql.js.flow
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<6d9922010e1474b1214c383c394daa24>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,7 +18,6 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type ReactRelayRefetchContainerFlowtest_viewer$fragmentType: FragmentType;
|
21
|
-
export type ReactRelayRefetchContainerFlowtest_viewer$ref = ReactRelayRefetchContainerFlowtest_viewer$fragmentType;
|
22
21
|
export type ReactRelayRefetchContainerFlowtest_viewer$data = {|
|
23
22
|
+account_user: ?{|
|
24
23
|
+friends: ?{|
|
@@ -31,7 +30,6 @@ export type ReactRelayRefetchContainerFlowtest_viewer$data = {|
|
|
31
30
|
|},
|
32
31
|
+$fragmentType: ReactRelayRefetchContainerFlowtest_viewer$fragmentType,
|
33
32
|
|};
|
34
|
-
export type ReactRelayRefetchContainerFlowtest_viewer = ReactRelayRefetchContainerFlowtest_viewer$data;
|
35
33
|
export type ReactRelayRefetchContainerFlowtest_viewer$key = {
|
36
34
|
+$data?: ReactRelayRefetchContainerFlowtest_viewer$data,
|
37
35
|
+$fragmentSpreads: ReactRelayRefetchContainerFlowtest_viewer$fragmentType,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<050146f21476e7ed6edd2243d4c6b65d>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -19,13 +19,11 @@ import type { Fragment, ReaderFragment } from 'relay-runtime';
|
|
19
19
|
type RelayModernFlowtest_user$fragmentType = any;
|
20
20
|
import type { FragmentType } from "relay-runtime";
|
21
21
|
declare export opaque type RelayModernFlowtest_badref$fragmentType: FragmentType;
|
22
|
-
export type RelayModernFlowtest_badref$ref = RelayModernFlowtest_badref$fragmentType;
|
23
22
|
export type RelayModernFlowtest_badref$data = {|
|
24
23
|
+id: string,
|
25
24
|
+$fragmentSpreads: RelayModernFlowtest_user$fragmentType,
|
26
25
|
+$fragmentType: RelayModernFlowtest_badref$fragmentType,
|
27
26
|
|};
|
28
|
-
export type RelayModernFlowtest_badref = RelayModernFlowtest_badref$data;
|
29
27
|
export type RelayModernFlowtest_badref$key = {
|
30
28
|
+$data?: RelayModernFlowtest_badref$data,
|
31
29
|
+$fragmentSpreads: RelayModernFlowtest_badref$fragmentType,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<d8eae7df6faa43d95f6140dc3c9ad3ba>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -19,13 +19,11 @@ import type { Fragment, ReaderFragment } from 'relay-runtime';
|
|
19
19
|
type RelayModernFlowtest_user$fragmentType = any;
|
20
20
|
import type { FragmentType } from "relay-runtime";
|
21
21
|
declare export opaque type RelayModernFlowtest_notref$fragmentType: FragmentType;
|
22
|
-
export type RelayModernFlowtest_notref$ref = RelayModernFlowtest_notref$fragmentType;
|
23
22
|
export type RelayModernFlowtest_notref$data = {|
|
24
23
|
+id: string,
|
25
24
|
+$fragmentSpreads: RelayModernFlowtest_user$fragmentType,
|
26
25
|
+$fragmentType: RelayModernFlowtest_notref$fragmentType,
|
27
26
|
|};
|
28
|
-
export type RelayModernFlowtest_notref = RelayModernFlowtest_notref$data;
|
29
27
|
export type RelayModernFlowtest_notref$key = {
|
30
28
|
+$data?: RelayModernFlowtest_notref$data,
|
31
29
|
+$fragmentSpreads: RelayModernFlowtest_notref$fragmentType,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<a7ba31d9d2381b0c8b700175be271b75>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,12 +18,10 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type RelayModernFlowtest_user$fragmentType: FragmentType;
|
21
|
-
export type RelayModernFlowtest_user$ref = RelayModernFlowtest_user$fragmentType;
|
22
21
|
export type RelayModernFlowtest_user$data = {|
|
23
22
|
+name: ?string,
|
24
23
|
+$fragmentType: RelayModernFlowtest_user$fragmentType,
|
25
24
|
|};
|
26
|
-
export type RelayModernFlowtest_user = RelayModernFlowtest_user$data;
|
27
25
|
export type RelayModernFlowtest_user$key = {
|
28
26
|
+$data?: RelayModernFlowtest_user$data,
|
29
27
|
+$fragmentSpreads: RelayModernFlowtest_user$fragmentType,
|
@@ -4,7 +4,7 @@
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
6
6
|
*
|
7
|
-
* @generated SignedSource<<
|
7
|
+
* @generated SignedSource<<d032f6e721c9c9cdd034cdd93dfcbad6>>
|
8
8
|
* @flow
|
9
9
|
* @lightSyntaxTransform
|
10
10
|
* @nogrep
|
@@ -18,12 +18,10 @@
|
|
18
18
|
import type { Fragment, ReaderFragment } from 'relay-runtime';
|
19
19
|
import type { FragmentType } from "relay-runtime";
|
20
20
|
declare export opaque type RelayModernFlowtest_users$fragmentType: FragmentType;
|
21
|
-
export type RelayModernFlowtest_users$ref = RelayModernFlowtest_users$fragmentType;
|
22
21
|
export type RelayModernFlowtest_users$data = $ReadOnlyArray<{|
|
23
22
|
+name: ?string,
|
24
23
|
+$fragmentType: RelayModernFlowtest_users$fragmentType,
|
25
24
|
|}>;
|
26
|
-
export type RelayModernFlowtest_users = RelayModernFlowtest_users$data;
|
27
25
|
export type RelayModernFlowtest_users$key = $ReadOnlyArray<{
|
28
26
|
+$data?: RelayModernFlowtest_users$data,
|
29
27
|
+$fragmentSpreads: RelayModernFlowtest_users$fragmentType,
|
package/hooks.js
CHANGED
package/index.js
CHANGED
@@ -36,7 +36,7 @@ interface Thenable<+R> {
|
|
36
36
|
|
37
37
|
let actingUpdatesScopeDepth = 0;
|
38
38
|
|
39
|
-
function act(scope: () => Thenable<
|
39
|
+
function act<T>(scope: () => Thenable<T> | T): Thenable<T> {
|
40
40
|
if (Scheduler.unstable_flushAllWithoutAsserting === undefined) {
|
41
41
|
throw Error(
|
42
42
|
'This version of `act` requires a special mock build of Scheduler.',
|
@@ -49,10 +49,19 @@ function act(scope: () => Thenable<mixed> | void) {
|
|
49
49
|
);
|
50
50
|
}
|
51
51
|
|
52
|
+
const previousIsActEnvironment = global.IS_REACT_ACT_ENVIRONMENT;
|
52
53
|
const previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
|
53
54
|
actingUpdatesScopeDepth++;
|
55
|
+
if (__DEV__ && actingUpdatesScopeDepth === 1) {
|
56
|
+
// Because this is not the "real" `act`, we set this to `false` so React
|
57
|
+
// knows not to fire `act` warnings.
|
58
|
+
global.IS_REACT_ACT_ENVIRONMENT = false;
|
59
|
+
}
|
54
60
|
|
55
61
|
const unwind = () => {
|
62
|
+
if (__DEV__ && actingUpdatesScopeDepth === 1) {
|
63
|
+
global.IS_REACT_ACT_ENVIRONMENT = previousIsActEnvironment;
|
64
|
+
}
|
56
65
|
actingUpdatesScopeDepth--;
|
57
66
|
|
58
67
|
if (__DEV__) {
|
@@ -71,20 +80,21 @@ function act(scope: () => Thenable<mixed> | void) {
|
|
71
80
|
// returned and 2) we could use async/await. Since it's only our used in
|
72
81
|
// our test suite, we should be able to.
|
73
82
|
try {
|
74
|
-
const
|
83
|
+
const result = scope();
|
75
84
|
if (
|
76
|
-
typeof
|
77
|
-
|
78
|
-
typeof
|
85
|
+
typeof result === 'object' &&
|
86
|
+
result !== null &&
|
87
|
+
typeof result.then === 'function'
|
79
88
|
) {
|
89
|
+
const thenableResult: Thenable<T> = (result: any);
|
80
90
|
return {
|
81
|
-
then(resolve
|
82
|
-
|
83
|
-
|
91
|
+
then(resolve, reject) {
|
92
|
+
thenableResult.then(
|
93
|
+
returnValue => {
|
84
94
|
flushActWork(
|
85
95
|
() => {
|
86
96
|
unwind();
|
87
|
-
resolve();
|
97
|
+
resolve(returnValue);
|
88
98
|
},
|
89
99
|
error => {
|
90
100
|
unwind();
|
@@ -100,6 +110,7 @@ function act(scope: () => Thenable<mixed> | void) {
|
|
100
110
|
},
|
101
111
|
};
|
102
112
|
} else {
|
113
|
+
const returnValue: T = (result: any);
|
103
114
|
try {
|
104
115
|
// TODO: Let's not support non-async scopes at all in our tests. Need to
|
105
116
|
// migrate existing tests.
|
@@ -107,6 +118,11 @@ function act(scope: () => Thenable<mixed> | void) {
|
|
107
118
|
do {
|
108
119
|
didFlushWork = Scheduler.unstable_flushAllWithoutAsserting();
|
109
120
|
} while (didFlushWork);
|
121
|
+
return {
|
122
|
+
then(resolve, reject) {
|
123
|
+
resolve(returnValue);
|
124
|
+
},
|
125
|
+
};
|
110
126
|
} finally {
|
111
127
|
unwind();
|
112
128
|
}
|
package/legacy.js
CHANGED
@@ -132,7 +132,7 @@ var ReactRelayQueryRenderer = /*#__PURE__*/function (_React$Component) {
|
|
132
132
|
_proto.componentDidMount = function componentDidMount() {
|
133
133
|
var _this2 = this;
|
134
134
|
|
135
|
-
if (
|
135
|
+
if (this._maybeHiddenOrFastRefresh === true) {
|
136
136
|
// This block only runs if the component has previously "unmounted"
|
137
137
|
// due to it being hidden by the Offscreen API, or during fast refresh.
|
138
138
|
// At this point, the current cached resource will have been disposed
|
@@ -36,10 +36,21 @@ function act(scope) {
|
|
36
36
|
throw Error("This version of `act` requires Jest's timer mocks " + '(i.e. jest.useFakeTimers).');
|
37
37
|
}
|
38
38
|
|
39
|
+
var previousIsActEnvironment = global.IS_REACT_ACT_ENVIRONMENT;
|
39
40
|
var previousActingUpdatesScopeDepth = actingUpdatesScopeDepth;
|
40
41
|
actingUpdatesScopeDepth++;
|
41
42
|
|
43
|
+
if (process.env.NODE_ENV !== "production" && actingUpdatesScopeDepth === 1) {
|
44
|
+
// Because this is not the "real" `act`, we set this to `false` so React
|
45
|
+
// knows not to fire `act` warnings.
|
46
|
+
global.IS_REACT_ACT_ENVIRONMENT = false;
|
47
|
+
}
|
48
|
+
|
42
49
|
var unwind = function unwind() {
|
50
|
+
if (process.env.NODE_ENV !== "production" && actingUpdatesScopeDepth === 1) {
|
51
|
+
global.IS_REACT_ACT_ENVIRONMENT = previousIsActEnvironment;
|
52
|
+
}
|
53
|
+
|
43
54
|
actingUpdatesScopeDepth--;
|
44
55
|
|
45
56
|
if (process.env.NODE_ENV !== "production") {
|
@@ -55,15 +66,16 @@ function act(scope) {
|
|
55
66
|
|
56
67
|
|
57
68
|
try {
|
58
|
-
var
|
69
|
+
var result = scope();
|
59
70
|
|
60
|
-
if (typeof
|
71
|
+
if (typeof result === 'object' && result !== null && typeof result.then === 'function') {
|
72
|
+
var thenableResult = result;
|
61
73
|
return {
|
62
74
|
then: function then(resolve, reject) {
|
63
|
-
|
75
|
+
thenableResult.then(function (returnValue) {
|
64
76
|
flushActWork(function () {
|
65
77
|
unwind();
|
66
|
-
resolve();
|
78
|
+
resolve(returnValue);
|
67
79
|
}, function (error) {
|
68
80
|
unwind();
|
69
81
|
reject(error);
|
@@ -75,6 +87,8 @@ function act(scope) {
|
|
75
87
|
}
|
76
88
|
};
|
77
89
|
} else {
|
90
|
+
var returnValue = result;
|
91
|
+
|
78
92
|
try {
|
79
93
|
// TODO: Let's not support non-async scopes at all in our tests. Need to
|
80
94
|
// migrate existing tests.
|
@@ -83,6 +97,12 @@ function act(scope) {
|
|
83
97
|
do {
|
84
98
|
didFlushWork = Scheduler.unstable_flushAllWithoutAsserting();
|
85
99
|
} while (didFlushWork);
|
100
|
+
|
101
|
+
return {
|
102
|
+
then: function then(resolve, reject) {
|
103
|
+
resolve(returnValue);
|
104
|
+
}
|
105
|
+
};
|
86
106
|
} finally {
|
87
107
|
unwind();
|
88
108
|
}
|
@@ -38,9 +38,9 @@ var _require2 = require('relay-runtime'),
|
|
38
38
|
getPendingOperationsForFragment = _require2.getPendingOperationsForFragment,
|
39
39
|
getSelector = _require2.getSelector,
|
40
40
|
getVariablesFromFragment = _require2.getVariablesFromFragment,
|
41
|
+
handlePotentialSnapshotErrors = _require2.handlePotentialSnapshotErrors,
|
41
42
|
isPromise = _require2.isPromise,
|
42
|
-
recycleNodesInto = _require2.recycleNodesInto
|
43
|
-
reportMissingRequiredFields = _require2.reportMissingRequiredFields;
|
43
|
+
recycleNodesInto = _require2.recycleNodesInto;
|
44
44
|
|
45
45
|
var WEAKMAP_SUPPORTED = typeof WeakMap === 'function';
|
46
46
|
// TODO: Fix to not rely on LRU. If the number of active fragments exceeds this
|
@@ -263,7 +263,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
263
263
|
}
|
264
264
|
|
265
265
|
if (cachedValue.kind === 'done' && cachedValue.result.snapshot) {
|
266
|
-
this.
|
266
|
+
this._handlePotentialSnapshotErrorsInSnapshot(cachedValue.result.snapshot);
|
267
267
|
|
268
268
|
return cachedValue.result;
|
269
269
|
}
|
@@ -279,7 +279,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
279
279
|
var fragmentResult = getFragmentResult(fragmentIdentifier, snapshot, storeEpoch);
|
280
280
|
|
281
281
|
if (!fragmentResult.isMissingData) {
|
282
|
-
this.
|
282
|
+
this._handlePotentialSnapshotErrorsInSnapshot(snapshot);
|
283
283
|
|
284
284
|
this._cache.set(fragmentIdentifier, {
|
285
285
|
kind: 'done',
|
@@ -361,7 +361,7 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
361
361
|
throw ((_clientEdgePromises2 = clientEdgePromises) === null || _clientEdgePromises2 === void 0 ? void 0 : _clientEdgePromises2.length) ? Promise.all([parentQueryPromiseResultPromise].concat((0, _toConsumableArray2["default"])(clientEdgePromises))) : parentQueryPromiseResultPromise;
|
362
362
|
}
|
363
363
|
|
364
|
-
this.
|
364
|
+
this._handlePotentialSnapshotErrorsInSnapshot(snapshot);
|
365
365
|
|
366
366
|
return getFragmentResult(fragmentIdentifier, snapshot, storeEpoch);
|
367
367
|
};
|
@@ -383,19 +383,15 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
383
383
|
};
|
384
384
|
};
|
385
385
|
|
386
|
-
_proto2.
|
386
|
+
_proto2._handlePotentialSnapshotErrorsInSnapshot = function _handlePotentialSnapshotErrorsInSnapshot(snapshot) {
|
387
387
|
var _this4 = this;
|
388
388
|
|
389
389
|
if (Array.isArray(snapshot)) {
|
390
390
|
snapshot.forEach(function (s) {
|
391
|
-
|
392
|
-
reportMissingRequiredFields(_this4._environment, s.missingRequiredFields);
|
393
|
-
}
|
391
|
+
handlePotentialSnapshotErrors(_this4._environment, s.missingRequiredFields, s.relayResolverErrors);
|
394
392
|
});
|
395
393
|
} else {
|
396
|
-
|
397
|
-
reportMissingRequiredFields(this._environment, snapshot.missingRequiredFields);
|
398
|
-
}
|
394
|
+
handlePotentialSnapshotErrors(this._environment, snapshot.missingRequiredFields, snapshot.relayResolverErrors);
|
399
395
|
}
|
400
396
|
};
|
401
397
|
|
@@ -559,7 +555,8 @@ var FragmentResourceImpl = /*#__PURE__*/function () {
|
|
559
555
|
missingClientEdges: currentSnapshot.missingClientEdges,
|
560
556
|
seenRecords: currentSnapshot.seenRecords,
|
561
557
|
selector: currentSnapshot.selector,
|
562
|
-
missingRequiredFields: currentSnapshot.missingRequiredFields
|
558
|
+
missingRequiredFields: currentSnapshot.missingRequiredFields,
|
559
|
+
relayResolverErrors: currentSnapshot.relayResolverErrors
|
563
560
|
};
|
564
561
|
|
565
562
|
if (updatedData !== renderData) {
|