diff --git a/packages/react-server-dom-relay/src/ReactFlightDOMRelayClientHostConfig.js b/packages/react-server-dom-relay/src/ReactFlightDOMRelayClientHostConfig.js index 35203ee92c5c5..30718865ccdad 100644 --- a/packages/react-server-dom-relay/src/ReactFlightDOMRelayClientHostConfig.js +++ b/packages/react-server-dom-relay/src/ReactFlightDOMRelayClientHostConfig.js @@ -9,7 +9,7 @@ import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient'; -import type JSResourceReference from 'JSResourceReference'; +import type {JSResourceReference} from 'JSResourceReference'; export type ModuleReference = JSResourceReference; diff --git a/packages/react-server-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js b/packages/react-server-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js index a29a6449d8b4d..8fcd823204cbe 100644 --- a/packages/react-server-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js +++ b/packages/react-server-dom-relay/src/ReactFlightDOMRelayServerHostConfig.js @@ -11,7 +11,8 @@ import type {RowEncoding, JSONValue} from './ReactFlightDOMRelayProtocol'; import type {Request, ReactModel} from 'react-server/src/ReactFlightServer'; -import JSResourceReference from 'JSResourceReference'; +import type {JSResourceReference} from 'JSResourceReference'; +import JSResourceReferenceImpl from 'JSResourceReferenceImpl'; import hasOwnProperty from 'shared/hasOwnProperty'; import isArray from 'shared/isArray'; @@ -39,7 +40,7 @@ export type { } from 'ReactFlightDOMRelayServerIntegration'; export function isModuleReference(reference: Object): boolean { - return reference instanceof JSResourceReference; + return reference instanceof JSResourceReferenceImpl; } export type ModuleKey = ModuleReference; diff --git a/packages/react-server-dom-relay/src/__mocks__/JSResourceReference.js b/packages/react-server-dom-relay/src/__mocks__/JSResourceReferenceImpl.js similarity index 66% rename from packages/react-server-dom-relay/src/__mocks__/JSResourceReference.js rename to packages/react-server-dom-relay/src/__mocks__/JSResourceReferenceImpl.js index 18dab0739c650..2891385ae97ed 100644 --- a/packages/react-server-dom-relay/src/__mocks__/JSResourceReference.js +++ b/packages/react-server-dom-relay/src/__mocks__/JSResourceReferenceImpl.js @@ -7,13 +7,13 @@ 'use strict'; -class JSResourceReference { - constructor(exportedValue) { - this._moduleId = exportedValue; +class JSResourceReferenceImpl { + constructor(moduleId) { + this._moduleId = moduleId; } getModuleId() { return this._moduleId; } } -module.exports = JSResourceReference; +module.exports = JSResourceReferenceImpl; diff --git a/packages/react-server-dom-relay/src/__mocks__/ReactFlightDOMRelayClientIntegration.js b/packages/react-server-dom-relay/src/__mocks__/ReactFlightDOMRelayClientIntegration.js index 25403877da25c..4d89b5a2b8b3b 100644 --- a/packages/react-server-dom-relay/src/__mocks__/ReactFlightDOMRelayClientIntegration.js +++ b/packages/react-server-dom-relay/src/__mocks__/ReactFlightDOMRelayClientIntegration.js @@ -7,11 +7,11 @@ 'use strict'; -import JSResourceReference from 'JSResourceReference'; +import JSResourceReferenceImpl from 'JSResourceReferenceImpl'; const ReactFlightDOMRelayClientIntegration = { resolveModuleReference(moduleData) { - return new JSResourceReference(moduleData); + return new JSResourceReferenceImpl(moduleData); }, preloadModule(moduleReference) {}, requireModule(moduleReference) { diff --git a/packages/react-server-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js b/packages/react-server-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js index dc981b9bd5304..daf01d5d69bef 100644 --- a/packages/react-server-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js +++ b/packages/react-server-dom-relay/src/__tests__/ReactFlightDOMRelay-test.internal.js @@ -10,7 +10,7 @@ let act; let React; let ReactDOMClient; -let JSResourceReference; +let JSResourceReferenceImpl; let ReactDOMFlightRelayServer; let ReactDOMFlightRelayClient; let SuspenseList; @@ -24,7 +24,7 @@ describe('ReactFlightDOMRelay', () => { ReactDOMClient = require('react-dom/client'); ReactDOMFlightRelayServer = require('react-server-dom-relay/server'); ReactDOMFlightRelayClient = require('react-server-dom-relay'); - JSResourceReference = require('JSResourceReference'); + JSResourceReferenceImpl = require('JSResourceReferenceImpl'); if (gate(flags => flags.enableSuspenseList)) { SuspenseList = React.SuspenseList; } @@ -84,7 +84,7 @@ describe('ReactFlightDOMRelay', () => { ); } - const User = new JSResourceReference(UserClient); + const User = new JSResourceReferenceImpl(UserClient); function Greeting({firstName, lastName}) { return ; diff --git a/packages/react-server-native-relay/src/ReactFlightNativeRelayClientHostConfig.js b/packages/react-server-native-relay/src/ReactFlightNativeRelayClientHostConfig.js index d8e27657b2925..eb6f0080e3718 100644 --- a/packages/react-server-native-relay/src/ReactFlightNativeRelayClientHostConfig.js +++ b/packages/react-server-native-relay/src/ReactFlightNativeRelayClientHostConfig.js @@ -9,7 +9,7 @@ import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient'; -import type JSResourceReference from 'JSResourceReference'; +import type {JSResourceReference} from 'JSResourceReference'; export type ModuleReference = JSResourceReference; diff --git a/packages/react-server-native-relay/src/ReactFlightNativeRelayServerHostConfig.js b/packages/react-server-native-relay/src/ReactFlightNativeRelayServerHostConfig.js index b07c084eaa691..c139769fe4535 100644 --- a/packages/react-server-native-relay/src/ReactFlightNativeRelayServerHostConfig.js +++ b/packages/react-server-native-relay/src/ReactFlightNativeRelayServerHostConfig.js @@ -11,9 +11,10 @@ import type {RowEncoding, JSONValue} from './ReactFlightNativeRelayProtocol'; import type {Request, ReactModel} from 'react-server/src/ReactFlightServer'; import hasOwnProperty from 'shared/hasOwnProperty'; import isArray from 'shared/isArray'; +import type {JSResourceReference} from 'JSResourceReference'; import JSResourceReferenceImpl from 'JSResourceReferenceImpl'; -export type ModuleReference = JSResourceReferenceImpl; +export type ModuleReference = JSResourceReference; import type { Destination, diff --git a/packages/react-server-native-relay/src/__mocks__/JSResourceReferenceImpl.js b/packages/react-server-native-relay/src/__mocks__/JSResourceReferenceImpl.js index 8fc06aca7a30e..2891385ae97ed 100644 --- a/packages/react-server-native-relay/src/__mocks__/JSResourceReferenceImpl.js +++ b/packages/react-server-native-relay/src/__mocks__/JSResourceReferenceImpl.js @@ -8,8 +8,8 @@ 'use strict'; class JSResourceReferenceImpl { - constructor(exportedValue) { - this._moduleId = exportedValue; + constructor(moduleId) { + this._moduleId = moduleId; } getModuleId() { return this._moduleId; diff --git a/packages/react-server-native-relay/src/__mocks__/ReactFlightNativeRelayClientIntegration.js b/packages/react-server-native-relay/src/__mocks__/ReactFlightNativeRelayClientIntegration.js index ea8f508ea2944..64cc55bc22b91 100644 --- a/packages/react-server-native-relay/src/__mocks__/ReactFlightNativeRelayClientIntegration.js +++ b/packages/react-server-native-relay/src/__mocks__/ReactFlightNativeRelayClientIntegration.js @@ -7,11 +7,11 @@ 'use strict'; -import JSResourceReference from 'JSResourceReference'; +import JSResourceReferenceImpl from 'JSResourceReferenceImpl'; const ReactFlightNativeRelayClientIntegration = { resolveModuleReference(moduleData) { - return new JSResourceReference(moduleData); + return new JSResourceReferenceImpl(moduleData); }, preloadModule(moduleReference) {}, requireModule(moduleReference) { diff --git a/scripts/flow/react-relay-hooks.js b/scripts/flow/react-relay-hooks.js index 73eb20ef41272..9f452689976af 100644 --- a/scripts/flow/react-relay-hooks.js +++ b/scripts/flow/react-relay-hooks.js @@ -15,24 +15,29 @@ type JSONValue = | {+[key: string]: JSONValue} | $ReadOnlyArray; -declare class JSResourceReference { - _moduleId: T; - getModuleId(): string; -} - -// Haste declare module 'JSResourceReference' { - declare export default typeof JSResourceReference; + declare export interface JSResourceReference { + getModuleId(): string; + getModuleIdAsRef(): $Flow$ModuleRef; + getModuleIfRequired(): ?T; + load(): Promise; + preload(): void; + } } -// Metro declare module 'JSResourceReferenceImpl' { - declare export default class JSResourceReferenceImpl< - T, - > extends JSResourceReference {} + declare export default class JSResourceReferenceImpl { + getModuleId(): string; + getModuleIdAsRef(): $Flow$ModuleRef; + getModuleIfRequired(): ?T; + load(): Promise; + preload(): void; + } } declare module 'ReactFlightDOMRelayServerIntegration' { + import type {JSResourceReference} from 'JSResourceReference'; + declare export opaque type Destination; declare export opaque type BundlerConfig; declare export function emitRow( @@ -49,6 +54,8 @@ declare module 'ReactFlightDOMRelayServerIntegration' { } declare module 'ReactFlightDOMRelayClientIntegration' { + import type {JSResourceReference} from 'JSResourceReference'; + declare export opaque type ModuleMetaData; declare export function resolveModuleReference( moduleData: ModuleMetaData, @@ -62,6 +69,8 @@ declare module 'ReactFlightDOMRelayClientIntegration' { } declare module 'ReactFlightNativeRelayServerIntegration' { + import type {JSResourceReference} from 'JSResourceReference'; + declare export opaque type Destination; declare export opaque type BundlerConfig; declare export function emitRow( @@ -78,6 +87,8 @@ declare module 'ReactFlightNativeRelayServerIntegration' { } declare module 'ReactFlightNativeRelayClientIntegration' { + import type {JSResourceReference} from 'JSResourceReference'; + declare export opaque type ModuleMetaData; declare export function resolveModuleReference( moduleData: ModuleMetaData, diff --git a/scripts/rollup/bundles.js b/scripts/rollup/bundles.js index 4819ecb2a47a8..0c8a3b64030c3 100644 --- a/scripts/rollup/bundles.js +++ b/scripts/rollup/bundles.js @@ -405,7 +405,7 @@ const bundles = [ externals: [ 'react', 'ReactFlightDOMRelayServerIntegration', - 'JSResourceReference', + 'JSResourceReferenceImpl', ], }, @@ -420,7 +420,7 @@ const bundles = [ externals: [ 'react', 'ReactFlightDOMRelayClientIntegration', - 'JSResourceReference', + 'JSResourceReferenceImpl', ], }, diff --git a/yarn.lock b/yarn.lock index f9d8524bd6c10..4f9e9225b382c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13629,7 +13629,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8: prop-types "^15.6.2" scheduler "^0.13.0" -react-is@^16.8.1, "react-is@npm:react-is": +react-is@^16.8.1, react-is@^17.0.1, "react-is@npm:react-is": version "17.0.2" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==