Unify JSResourceReference Interfaces (#24507)

This commit is contained in:
Timothy Yung 2022-05-06 11:24:04 -07:00 committed by GitHub
parent e531a4a62d
commit 46a6d77e32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 45 additions and 32 deletions

View File

@ -9,7 +9,7 @@
import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient'; import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient';
import type JSResourceReference from 'JSResourceReference'; import type {JSResourceReference} from 'JSResourceReference';
export type ModuleReference<T> = JSResourceReference<T>; export type ModuleReference<T> = JSResourceReference<T>;

View File

@ -11,7 +11,8 @@ import type {RowEncoding, JSONValue} from './ReactFlightDOMRelayProtocol';
import type {Request, ReactModel} from 'react-server/src/ReactFlightServer'; 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 hasOwnProperty from 'shared/hasOwnProperty';
import isArray from 'shared/isArray'; import isArray from 'shared/isArray';
@ -39,7 +40,7 @@ export type {
} from 'ReactFlightDOMRelayServerIntegration'; } from 'ReactFlightDOMRelayServerIntegration';
export function isModuleReference(reference: Object): boolean { export function isModuleReference(reference: Object): boolean {
return reference instanceof JSResourceReference; return reference instanceof JSResourceReferenceImpl;
} }
export type ModuleKey = ModuleReference<any>; export type ModuleKey = ModuleReference<any>;

View File

@ -7,13 +7,13 @@
'use strict'; 'use strict';
class JSResourceReference { class JSResourceReferenceImpl {
constructor(exportedValue) { constructor(moduleId) {
this._moduleId = exportedValue; this._moduleId = moduleId;
} }
getModuleId() { getModuleId() {
return this._moduleId; return this._moduleId;
} }
} }
module.exports = JSResourceReference; module.exports = JSResourceReferenceImpl;

View File

@ -7,11 +7,11 @@
'use strict'; 'use strict';
import JSResourceReference from 'JSResourceReference'; import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
const ReactFlightDOMRelayClientIntegration = { const ReactFlightDOMRelayClientIntegration = {
resolveModuleReference(moduleData) { resolveModuleReference(moduleData) {
return new JSResourceReference(moduleData); return new JSResourceReferenceImpl(moduleData);
}, },
preloadModule(moduleReference) {}, preloadModule(moduleReference) {},
requireModule(moduleReference) { requireModule(moduleReference) {

View File

@ -10,7 +10,7 @@
let act; let act;
let React; let React;
let ReactDOMClient; let ReactDOMClient;
let JSResourceReference; let JSResourceReferenceImpl;
let ReactDOMFlightRelayServer; let ReactDOMFlightRelayServer;
let ReactDOMFlightRelayClient; let ReactDOMFlightRelayClient;
let SuspenseList; let SuspenseList;
@ -24,7 +24,7 @@ describe('ReactFlightDOMRelay', () => {
ReactDOMClient = require('react-dom/client'); ReactDOMClient = require('react-dom/client');
ReactDOMFlightRelayServer = require('react-server-dom-relay/server'); ReactDOMFlightRelayServer = require('react-server-dom-relay/server');
ReactDOMFlightRelayClient = require('react-server-dom-relay'); ReactDOMFlightRelayClient = require('react-server-dom-relay');
JSResourceReference = require('JSResourceReference'); JSResourceReferenceImpl = require('JSResourceReferenceImpl');
if (gate(flags => flags.enableSuspenseList)) { if (gate(flags => flags.enableSuspenseList)) {
SuspenseList = React.SuspenseList; SuspenseList = React.SuspenseList;
} }
@ -84,7 +84,7 @@ describe('ReactFlightDOMRelay', () => {
</span> </span>
); );
} }
const User = new JSResourceReference(UserClient); const User = new JSResourceReferenceImpl(UserClient);
function Greeting({firstName, lastName}) { function Greeting({firstName, lastName}) {
return <User greeting="Hello" name={firstName + ' ' + lastName} />; return <User greeting="Hello" name={firstName + ' ' + lastName} />;

View File

@ -9,7 +9,7 @@
import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient'; import type {JSONValue, ResponseBase} from 'react-client/src/ReactFlightClient';
import type JSResourceReference from 'JSResourceReference'; import type {JSResourceReference} from 'JSResourceReference';
export type ModuleReference<T> = JSResourceReference<T>; export type ModuleReference<T> = JSResourceReference<T>;

View File

@ -11,9 +11,10 @@ import type {RowEncoding, JSONValue} from './ReactFlightNativeRelayProtocol';
import type {Request, ReactModel} from 'react-server/src/ReactFlightServer'; import type {Request, ReactModel} from 'react-server/src/ReactFlightServer';
import hasOwnProperty from 'shared/hasOwnProperty'; import hasOwnProperty from 'shared/hasOwnProperty';
import isArray from 'shared/isArray'; import isArray from 'shared/isArray';
import type {JSResourceReference} from 'JSResourceReference';
import JSResourceReferenceImpl from 'JSResourceReferenceImpl'; import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
export type ModuleReference<T> = JSResourceReferenceImpl<T>; export type ModuleReference<T> = JSResourceReference<T>;
import type { import type {
Destination, Destination,

View File

@ -8,8 +8,8 @@
'use strict'; 'use strict';
class JSResourceReferenceImpl { class JSResourceReferenceImpl {
constructor(exportedValue) { constructor(moduleId) {
this._moduleId = exportedValue; this._moduleId = moduleId;
} }
getModuleId() { getModuleId() {
return this._moduleId; return this._moduleId;

View File

@ -7,11 +7,11 @@
'use strict'; 'use strict';
import JSResourceReference from 'JSResourceReference'; import JSResourceReferenceImpl from 'JSResourceReferenceImpl';
const ReactFlightNativeRelayClientIntegration = { const ReactFlightNativeRelayClientIntegration = {
resolveModuleReference(moduleData) { resolveModuleReference(moduleData) {
return new JSResourceReference(moduleData); return new JSResourceReferenceImpl(moduleData);
}, },
preloadModule(moduleReference) {}, preloadModule(moduleReference) {},
requireModule(moduleReference) { requireModule(moduleReference) {

View File

@ -15,24 +15,29 @@ type JSONValue =
| {+[key: string]: JSONValue} | {+[key: string]: JSONValue}
| $ReadOnlyArray<JSONValue>; | $ReadOnlyArray<JSONValue>;
declare class JSResourceReference<T> {
_moduleId: T;
getModuleId(): string;
}
// Haste
declare module 'JSResourceReference' { declare module 'JSResourceReference' {
declare export default typeof JSResourceReference; declare export interface JSResourceReference<T> {
getModuleId(): string;
getModuleIdAsRef(): $Flow$ModuleRef<T>;
getModuleIfRequired(): ?T;
load(): Promise<T>;
preload(): void;
}
} }
// Metro
declare module 'JSResourceReferenceImpl' { declare module 'JSResourceReferenceImpl' {
declare export default class JSResourceReferenceImpl< declare export default class JSResourceReferenceImpl<T> {
T, getModuleId(): string;
> extends JSResourceReference<T> {} getModuleIdAsRef(): $Flow$ModuleRef<T>;
getModuleIfRequired(): ?T;
load(): Promise<T>;
preload(): void;
}
} }
declare module 'ReactFlightDOMRelayServerIntegration' { declare module 'ReactFlightDOMRelayServerIntegration' {
import type {JSResourceReference} from 'JSResourceReference';
declare export opaque type Destination; declare export opaque type Destination;
declare export opaque type BundlerConfig; declare export opaque type BundlerConfig;
declare export function emitRow( declare export function emitRow(
@ -49,6 +54,8 @@ declare module 'ReactFlightDOMRelayServerIntegration' {
} }
declare module 'ReactFlightDOMRelayClientIntegration' { declare module 'ReactFlightDOMRelayClientIntegration' {
import type {JSResourceReference} from 'JSResourceReference';
declare export opaque type ModuleMetaData; declare export opaque type ModuleMetaData;
declare export function resolveModuleReference<T>( declare export function resolveModuleReference<T>(
moduleData: ModuleMetaData, moduleData: ModuleMetaData,
@ -62,6 +69,8 @@ declare module 'ReactFlightDOMRelayClientIntegration' {
} }
declare module 'ReactFlightNativeRelayServerIntegration' { declare module 'ReactFlightNativeRelayServerIntegration' {
import type {JSResourceReference} from 'JSResourceReference';
declare export opaque type Destination; declare export opaque type Destination;
declare export opaque type BundlerConfig; declare export opaque type BundlerConfig;
declare export function emitRow( declare export function emitRow(
@ -78,6 +87,8 @@ declare module 'ReactFlightNativeRelayServerIntegration' {
} }
declare module 'ReactFlightNativeRelayClientIntegration' { declare module 'ReactFlightNativeRelayClientIntegration' {
import type {JSResourceReference} from 'JSResourceReference';
declare export opaque type ModuleMetaData; declare export opaque type ModuleMetaData;
declare export function resolveModuleReference<T>( declare export function resolveModuleReference<T>(
moduleData: ModuleMetaData, moduleData: ModuleMetaData,

View File

@ -405,7 +405,7 @@ const bundles = [
externals: [ externals: [
'react', 'react',
'ReactFlightDOMRelayServerIntegration', 'ReactFlightDOMRelayServerIntegration',
'JSResourceReference', 'JSResourceReferenceImpl',
], ],
}, },
@ -420,7 +420,7 @@ const bundles = [
externals: [ externals: [
'react', 'react',
'ReactFlightDOMRelayClientIntegration', 'ReactFlightDOMRelayClientIntegration',
'JSResourceReference', 'JSResourceReferenceImpl',
], ],
}, },

View File

@ -13629,7 +13629,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.8:
prop-types "^15.6.2" prop-types "^15.6.2"
scheduler "^0.13.0" 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" version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==