/** * 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 */ export type ReactNode = | React$Element | ReactPortal | ReactText | ReactFragment | ReactProvider | ReactConsumer; export type ReactEmpty = null | void | boolean; export type ReactFragment = ReactEmpty | Iterable; export type ReactNodeList = ReactEmpty | React$Node; export type ReactText = string | number; export type ReactProvider = { $$typeof: symbol | number, type: ReactProviderType, key: null | string, ref: null, props: { value: T, children?: ReactNodeList, ... }, ... }; export type ReactProviderType = { $$typeof: symbol | number, _context: ReactContext, ... }; export type ReactConsumer = { $$typeof: symbol | number, type: ReactContext, key: null | string, ref: null, props: { children: (value: T) => ReactNodeList, ... }, ... }; export type ReactContext = { $$typeof: symbol | number, Consumer: ReactContext, Provider: ReactProviderType, _currentValue: T, _currentValue2: T, _threadCount: number, // DEV only _currentRenderer?: Object | null, _currentRenderer2?: Object | null, // This value may be added by application code // to improve DEV tooling display names displayName?: string, // only used by ServerContext _defaultValue: T, _globalName: string, ... }; export type ServerContextJSONValue = | string | boolean | number | null | $ReadOnlyArray | {+[key: string]: ServerContextJSONValue}; export type ReactServerContext = ReactContext; export type ReactPortal = { $$typeof: symbol | number, key: null | string, containerInfo: any, children: ReactNodeList, // TODO: figure out the API for cross-renderer implementation. implementation: any, ... }; export type RefObject = { current: any, }; export type ReactScope = { $$typeof: symbol | number, }; export type ReactScopeQuery = ( type: string, props: {[string]: mixed, ...}, instance: mixed, ) => boolean; export type ReactScopeInstance = { DO_NOT_USE_queryAllNodes(ReactScopeQuery): null | Array, DO_NOT_USE_queryFirstNode(ReactScopeQuery): null | Object, containsNode(Object): boolean, getChildContextValues: (context: ReactContext) => Array, }; // The subset of a Thenable required by things thrown by Suspense. // This doesn't require a value to be passed to either handler. export interface Wakeable { then(onFulfill: () => mixed, onReject: () => mixed): void | Wakeable; } // The subset of a Promise that React APIs rely on. This resolves a value. // This doesn't require a return value neither from the handler nor the // then function. interface ThenableImpl { then( onFulfill: (value: T) => mixed, onReject: (error: mixed) => mixed, ): void | Wakeable; } interface UntrackedThenable extends ThenableImpl { status?: void; } export interface PendingThenable extends ThenableImpl { status: 'pending'; } export interface FulfilledThenable extends ThenableImpl { status: 'fulfilled'; value: T; } export interface RejectedThenable extends ThenableImpl { status: 'rejected'; reason: mixed; } export type Thenable = | UntrackedThenable | PendingThenable | FulfilledThenable | RejectedThenable; export type OffscreenMode = | 'hidden' | 'unstable-defer-without-hiding' | 'visible' | 'manual'; export type StartTransitionOptions = { name?: string, }; export type Usable = Thenable | ReactContext; export type ReactCustomFormAction = { name?: string, action?: string, encType?: string, method?: string, target?: string, data?: null | FormData, }; // This is an opaque type returned by decodeFormState on the server, but it's // defined in this shared file because the same type is used by React on // the client. export type ReactFormState = [ S /* actual state value */, string /* key path */, ReferenceId /* Server Reference ID */, number /* number of bound arguments */, ];