/** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow * @providesModule ReactTypes */ export type ReactNode = | React$Element | ReactCall | ReactReturn | ReactPortal | ReactText | ReactFragment | ReactProvider | ReactConsumer; export type ReactFragment = ReactEmpty | Iterable; export type ReactNodeList = ReactEmpty | React$Node; export type ReactText = string | number; export type ReactEmpty = null | void | boolean; export type ReactCall = { $$typeof: Symbol | number, type: Symbol | number, key: null | string, ref: null, props: { props: any, // This should be a more specific CallHandler handler: (props: any, returns: Array) => ReactNodeList, children?: ReactNodeList, }, }; export type ReactReturn = { $$typeof: Symbol | number, type: Symbol | number, key: null, ref: null, props: { value: V, }, }; 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: { render: (value: T) => ReactNodeList, bits?: number, }, }; export type ReactContext = { $$typeof: Symbol | number, provide(value: T, children: ReactNodeList, key?: string): ReactProvider, consume( render: (value: T) => ReactNodeList, observedBits?: number, key?: string, ): ReactConsumer, calculateChangedBits: ((a: T, b: T) => number) | null, defaultValue: T, currentValue: T, changedBits: number, // DEV only _currentRenderer?: Object | null, }; export type ReactPortal = { $$typeof: Symbol | number, key: null | string, containerInfo: any, children: ReactNodeList, // TODO: figure out the API for cross-renderer implementation. implementation: any, };