/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow */ import type {ReactClientValue} from 'react-server/src/ReactFlightServer'; import type { ClientReference, ServerReference, } from '../ReactFlightESMReferences'; export type {ClientReference, ServerReference}; export type ClientManifest = string; // base URL on the file system export type ServerReferenceId = string; export type ClientReferenceMetadata = [ string, // module path string, // export name ]; export type ClientReferenceKey = string; export { isClientReference, isServerReference, } from '../ReactFlightESMReferences'; export function getClientReferenceKey( reference: ClientReference, ): ClientReferenceKey { return reference.$$id; } export function resolveClientReferenceMetadata( config: ClientManifest, clientReference: ClientReference, ): ClientReferenceMetadata { const baseURL: string = config; const id = clientReference.$$id; const idx = id.lastIndexOf('#'); const exportName = id.slice(idx + 1); const fullURL = id.slice(0, idx); if (!fullURL.startsWith(baseURL)) { throw new Error( 'Attempted to load a Client Module outside the hosted root.', ); } // Relative URL const modulePath = fullURL.slice(baseURL.length); return [modulePath, exportName]; } export function getServerReferenceId( config: ClientManifest, serverReference: ServerReference, ): ServerReferenceId { return serverReference.$$id; } export function getServerReferenceBoundArguments( config: ClientManifest, serverReference: ServerReference, ): null | Array { return serverReference.$$bound; } export function getServerReferenceLocation( config: ClientManifest, serverReference: ServerReference, ): void | Error { return serverReference.$$location; }