Unify JSResourceReference Interfaces (#24507)
Timothy Yung committed
May 6, 2022 at 11:24 UTC
46a6d77e32d00c8c71ab989ca88b1c51aad07cdd
12 files changed
+45
-32
packages/react-server-dom-relay/src/ReactFlightDOMRelayClientHostConfig.js
+1
-1
@@ -9,7 +9,7 @@
9
10
import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient';
11
12
-import type JSResourceReference from 'JSResourceReference';
12
+import type {JSResourceReference} from 'JSResourceReference';
13
14
export type ModuleReference<T> = JSResourceReference<T>;
15
packages/react-server-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js
+3
-2
@@ -11,7 +11,8 @@ import type {RowEncoding, JSONValue} from './ReactFlightDOMRelayProtocol';
11
12
import type {Request, ReactModel} from 'react-server/src/ReactFlightServer';
13
14
-import JSResourceReference from 'JSResourceReference';
14
+import type {JSResourceReference} from 'JSResourceReference';
15
+import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
16
17
import hasOwnProperty from 'shared/hasOwnProperty';
18
import isArray from 'shared/isArray';
@@ -39,7 +40,7 @@ export type {
40
} from 'ReactFlightDOMRelayServerIntegration';
41
42
export function isModuleReference(reference: Object): boolean {
42
- return reference instanceof JSResourceReference;
43
+ return reference instanceof JSResourceReferenceImpl;
44
}
45
46
export type ModuleKey = ModuleReference<any>;
packages/react-server-dom-relay/src/__mocks__/JSResourceReferenceImpl.js
renamed
+4
-4
@@ -7,13 +7,13 @@
7
8
'use strict';
9
10
-class JSResourceReference {
11
- constructor(exportedValue) {
12
- this._moduleId = exportedValue;
10
+class JSResourceReferenceImpl {
11
+ constructor(moduleId) {
12
+ this._moduleId = moduleId;
13
}
14
getModuleId() {
15
return this._moduleId;
16
}
17
}
18
19
-module.exports = JSResourceReference;
19
+module.exports = JSResourceReferenceImpl;
packages/react-server-dom-relay/src/__mocks__/ReactFlightDOMRelayClientIntegration.js
+2
-2
@@ -7,11 +7,11 @@
7
8
'use strict';
9
10
-import JSResourceReference from 'JSResourceReference';
10
+import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
11
12
const ReactFlightDOMRelayClientIntegration = {
13
resolveModuleReference(moduleData) {
14
- return new JSResourceReference(moduleData);
14
+ return new JSResourceReferenceImpl(moduleData);
15
},
16
preloadModule(moduleReference) {},
17
requireModule(moduleReference) {
packages/react-server-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js
+3
-3
@@ -10,7 +10,7 @@
10
let act;
11
let React;
12
let ReactDOMClient;
13
-let JSResourceReference;
13
+let JSResourceReferenceImpl;
14
let ReactDOMFlightRelayServer;
15
let ReactDOMFlightRelayClient;
16
let SuspenseList;
@@ -24,7 +24,7 @@ describe('ReactFlightDOMRelay', () => {
24
ReactDOMClient = require('react-dom/client');
25
ReactDOMFlightRelayServer = require('react-server-dom-relay/server');
26
ReactDOMFlightRelayClient = require('react-server-dom-relay');
27
- JSResourceReference = require('JSResourceReference');
27
+ JSResourceReferenceImpl = require('JSResourceReferenceImpl');
28
if (gate(flags => flags.enableSuspenseList)) {
29
SuspenseList = React.SuspenseList;
30
}
@@ -84,7 +84,7 @@ describe('ReactFlightDOMRelay', () => {
84
</span>
85
);
86
}
87
- const User = new JSResourceReference(UserClient);
87
+ const User = new JSResourceReferenceImpl(UserClient);
88
89
function Greeting({firstName, lastName}) {
90
return <User greeting="Hello" name={firstName + ' ' + lastName} />;
packages/react-server-native-relay/src/ReactFlightNativeRelayClientHostConfig.js
+1
-1
@@ -9,7 +9,7 @@
9
10
import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient';
11
12
-import type JSResourceReference from 'JSResourceReference';
12
+import type {JSResourceReference} from 'JSResourceReference';
13
14
export type ModuleReference<T> = JSResourceReference<T>;
15
packages/react-server-native-relay/src/ReactFlightNativeRelayServerHostConfig.js
+2
-1
@@ -11,9 +11,10 @@ import type {RowEncoding, JSONValue} from './ReactFlightNativeRelayProtocol';
11
import type {Request, ReactModel} from 'react-server/src/ReactFlightServer';
12
import hasOwnProperty from 'shared/hasOwnProperty';
13
import isArray from 'shared/isArray';
14
+import type {JSResourceReference} from 'JSResourceReference';
15
import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
16
16
-export type ModuleReference<T> = JSResourceReferenceImpl<T>;
17
+export type ModuleReference<T> = JSResourceReference<T>;
18
19
import type {
20
Destination,
packages/react-server-native-relay/src/__mocks__/JSResourceReferenceImpl.js
+2
-2
@@ -8,8 +8,8 @@
8
'use strict';
9
10
class JSResourceReferenceImpl {
11
- constructor(exportedValue) {
12
- this._moduleId = exportedValue;
11
+ constructor(moduleId) {
12
+ this._moduleId = moduleId;
13
}
14
getModuleId() {
15
return this._moduleId;
packages/react-server-native-relay/src/__mocks__/ReactFlightNativeRelayClientIntegration.js
+2
-2
@@ -7,11 +7,11 @@
7
8
'use strict';
9
10
-import JSResourceReference from 'JSResourceReference';
10
+import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
11
12
const ReactFlightNativeRelayClientIntegration = {
13
resolveModuleReference(moduleData) {
14
- return new JSResourceReference(moduleData);
14
+ return new JSResourceReferenceImpl(moduleData);
15
},
16
preloadModule(moduleReference) {},
17
requireModule(moduleReference) {
scripts/flow/react-relay-hooks.js
+22
-11
@@ -15,24 +15,29 @@ type JSONValue =
15
| {+[key: string]: JSONValue}
16
| $ReadOnlyArray<JSONValue>;
17
18
-declare class JSResourceReference<T> {
19
- _moduleId: T;
20
- getModuleId(): string;
21
-}
22
-
23
-// Haste
18
declare module 'JSResourceReference' {
25
- declare export default typeof JSResourceReference;
19
+ declare export interface JSResourceReference<T> {
20
+ getModuleId(): string;
21
+ getModuleIdAsRef(): $Flow$ModuleRef<T>;
22
+ getModuleIfRequired(): ?T;
23
+ load(): Promise<T>;
24
+ preload(): void;
25
+ }
26
}
27
28
-// Metro
28
declare module 'JSResourceReferenceImpl' {
30
- declare export default class JSResourceReferenceImpl<
31
- T,
32
- > extends JSResourceReference<T> {}
29
+ declare export default class JSResourceReferenceImpl<T> {
30
+ getModuleId(): string;
31
+ getModuleIdAsRef(): $Flow$ModuleRef<T>;
32
+ getModuleIfRequired(): ?T;
33
+ load(): Promise<T>;
34
+ preload(): void;
35
+ }
36
}
37
38
declare module 'ReactFlightDOMRelayServerIntegration' {
39
+ import type {JSResourceReference} from 'JSResourceReference';
40
+
41
declare export opaque type Destination;
42
declare export opaque type BundlerConfig;
43
declare export function emitRow(
@@ -49,6 +54,8 @@ declare module 'ReactFlightDOMRelayServerIntegration' {
54
}
55
56
declare module 'ReactFlightDOMRelayClientIntegration' {
57
+ import type {JSResourceReference} from 'JSResourceReference';
58
+
59
declare export opaque type ModuleMetaData;
60
declare export function resolveModuleReference<T>(
61
moduleData: ModuleMetaData,
@@ -62,6 +69,8 @@ declare module 'ReactFlightDOMRelayClientIntegration' {
69
}
70
71
declare module 'ReactFlightNativeRelayServerIntegration' {
72
+ import type {JSResourceReference} from 'JSResourceReference';
73
+
74
declare export opaque type Destination;
75
declare export opaque type BundlerConfig;
76
declare export function emitRow(
@@ -78,6 +87,8 @@ declare module 'ReactFlightNativeRelayServerIntegration' {
87
}
88
89
declare module 'ReactFlightNativeRelayClientIntegration' {
90
+ import type {JSResourceReference} from 'JSResourceReference';
91
+
92
declare export opaque type ModuleMetaData;
93
declare export function resolveModuleReference<T>(
94
moduleData: ModuleMetaData,
scripts/rollup/bundles.js
+2
-2
@@ -405,7 +405,7 @@ const bundles = [
405
externals: [
406
'react',
407
'ReactFlightDOMRelayServerIntegration',
408
- 'JSResourceReference',
408
+ 'JSResourceReferenceImpl',
409
],
410
},
411
@@ -420,7 +420,7 @@ const bundles = [
420
externals: [
421
'react',
422
'ReactFlightDOMRelayClientIntegration',
423
- 'JSResourceReference',
423
+ 'JSResourceReferenceImpl',
424
],
425
},
426
yarn.lock
+1
-1
@@ -13629,7 +13629,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8:
13629
prop-types "^15.6.2"
13630
scheduler "^0.13.0"
13631
13632
-react-is@^16.8.1, "react-is@npm:react-is":
13632
+react-is@^16.8.1, react-is@^17.0.1, "react-is@npm:react-is":
13633
version "17.0.2"
13634
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
13635
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==