Files
react-native/packages/react-native-codegen/src/CodegenSchema.js
T
Ramanpreet Nara 91205d2ba4 Re-organize NativeModule types
Summary:
This diff:
- Moves the NativeModule flow types to the bottom of `CodegenSchema.js`.
- Re-organizes the NativeModuel flow type declarations based on when they're first used. Essentially, we start off by declaring a giant 'NativeModuleShape' type, which uses smaller undeclared types. Then we declare all the undeclared children of `NativeModuleShape`, and on and on. This way, you know where to start reading the types, and you can easily tell how every type relates to every other type.

Changelog: [Internal]

Differential Revision: D22828840

fbshipit-source-id: 5b4b9466a41b9bcb92a1de159bcbc12e4dc01df3
2020-07-31 15:13:21 -07:00

370 lines
9.5 KiB
JavaScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow strict
* @format
*/
'use strict';
export type PlatformType = 'iOS' | 'android';
export type CommandsFunctionTypeAnnotation = $ReadOnly<{|
type: 'FunctionTypeAnnotation',
params: $ReadOnlyArray<CommandsFunctionTypeParamAnnotation>,
|}>;
export type CommandsFunctionTypeParamAnnotation = $ReadOnly<{|
name: string,
typeAnnotation: CommandsTypeAnnotation,
|}>;
export type CommandsTypeAnnotation =
| ReservedFunctionValueTypeAnnotation
| BooleanTypeAnnotation
| Int32TypeAnnotation
| DoubleTypeAnnotation
| FloatTypeAnnotation
| StringTypeAnnotation;
type ReservedFunctionValueTypeAnnotation = $ReadOnly<{|
type: 'ReservedFunctionValueTypeAnnotation',
name: ReservedFunctionValueTypeName,
|}>;
export type DoubleTypeAnnotation = $ReadOnly<{|
type: 'DoubleTypeAnnotation',
|}>;
export type FloatTypeAnnotation = $ReadOnly<{|
type: 'FloatTypeAnnotation',
|}>;
export type BooleanTypeAnnotation = $ReadOnly<{|
type: 'BooleanTypeAnnotation',
|}>;
export type Int32TypeAnnotation = $ReadOnly<{|
type: 'Int32TypeAnnotation',
|}>;
export type StringTypeAnnotation = $ReadOnly<{|
type: 'StringTypeAnnotation',
|}>;
export type EventObjectPropertyType =
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
name: string,
optional: boolean,
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
name: string,
optional: boolean,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
name: string,
optional: boolean,
properties: $ReadOnlyArray<EventObjectPropertyType>,
|}>;
type PropTypeTypeAnnotation =
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
default: boolean | null,
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
default: string | null,
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
default: number,
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
default: number | null,
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
default: number,
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
default: string,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'Int32EnumTypeAnnotation',
default: number,
options: $ReadOnlyArray<{|
value: number,
|}>,
|}>
| $ReadOnly<{|
type: 'ReservedPropTypeAnnotation',
name:
| 'ColorPrimitive'
| 'ImageSourcePrimitive'
| 'PointPrimitive'
| 'EdgeInsetsPrimitive',
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>
| $ReadOnly<{|
type: 'ArrayTypeAnnotation',
elementType:
| $ReadOnly<{|
type: 'BooleanTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'StringTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'DoubleTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'FloatTypeAnnotation',
|}>
| $ReadOnly<{|
type: 'Int32TypeAnnotation',
|}>
| $ReadOnly<{|
type: 'StringEnumTypeAnnotation',
default: string,
options: $ReadOnlyArray<{|
name: string,
|}>,
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>
| $ReadOnly<{|
type: 'ReservedPropTypeAnnotation',
name:
| 'ColorPrimitive'
| 'ImageSourcePrimitive'
| 'PointPrimitive'
| 'EdgeInsetsPrimitive',
|}>
| $ReadOnly<{|
type: 'ArrayTypeAnnotation',
elementType: $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<PropTypeShape>,
|}>,
|}>,
|}>;
export type PropTypeShape = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: PropTypeTypeAnnotation,
|}>;
export type EventTypeShape = $ReadOnly<{|
name: string,
bubblingType: 'direct' | 'bubble',
optional: boolean,
paperTopLevelNameDeprecated?: string,
typeAnnotation: $ReadOnly<{|
type: 'EventTypeAnnotation',
argument?: $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<EventObjectPropertyType>,
|}>,
|}>,
|}>;
export type CommandTypeShape = $ReadOnly<{|
name: string,
optional: boolean,
typeAnnotation: CommandsFunctionTypeAnnotation,
|}>;
export type OptionsShape = $ReadOnly<{|
interfaceOnly?: boolean,
// Use for components with no current paper rename in progress
// Does not check for new name
paperComponentName?: string,
// Use for components that are not used on other platforms.
excludedPlatforms?: $ReadOnlyArray<PlatformType>,
// Use for components currently being renamed in paper
// Will use new name if it is available and fallback to this name
paperComponentNameDeprecated?: string,
|}>;
export type ExtendsPropsShape = $ReadOnly<{|
type: 'ReactNativeBuiltInType',
knownTypeName: 'ReactNativeCoreViewProps',
|}>;
export type ComponentShape = $ReadOnly<{|
...OptionsShape,
extendsProps: $ReadOnlyArray<ExtendsPropsShape>,
events: $ReadOnlyArray<EventTypeShape>,
props: $ReadOnlyArray<PropTypeShape>,
commands: $ReadOnlyArray<CommandTypeShape>,
|}>;
export type SchemaType = $ReadOnly<{|
modules: $ReadOnly<{
[module: string]: $ReadOnly<{|
components?: $ReadOnly<{[component: string]: ComponentShape, ...}>,
nativeModules?: $ReadOnly<{
[nativeModule: string]: NativeModuleShape,
...,
}>,
|}>,
...,
}>,
|}>;
/**
* NativeModule Types
*/
export type NativeModuleShape = $ReadOnly<{|
// We only support aliases to Objects
aliases: $ReadOnly<{[aliasName: string]: ObjectTypeAliasTypeShape, ...}>,
properties: $ReadOnlyArray<NativeModuleMethodTypeShape>,
|}>;
export type ObjectTypeAliasTypeShape = $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: $ReadOnlyArray<ObjectParamTypeAnnotation>,
|}>;
export type NativeModuleMethodTypeShape = $ReadOnly<{|
name: string,
typeAnnotation: FunctionTypeAnnotation,
|}>;
export type FunctionTypeAnnotation = $ReadOnly<{|
type: 'FunctionTypeAnnotation',
params: $ReadOnlyArray<FunctionTypeAnnotationParam>,
returnTypeAnnotation: FunctionTypeAnnotationReturn,
optional: boolean,
|}>;
export type FunctionTypeAnnotationReturn =
| $ReadOnly<{|
nullable: boolean,
type:
| 'GenericPromiseTypeAnnotation'
| 'VoidTypeAnnotation'
| PrimitiveTypeAnnotationType,
|}>
| $ReadOnly<{|
nullable: boolean,
type: 'ReservedFunctionValueTypeAnnotation',
name: ReservedFunctionValueTypeName,
|}>
| $ReadOnly<{|
nullable: boolean,
type: 'ArrayTypeAnnotation',
elementType: ?FunctionTypeAnnotationReturnArrayElementType,
|}>
| $ReadOnly<{|
nullable: boolean,
type: 'ObjectTypeAnnotation',
properties: ?$ReadOnlyArray<ObjectParamTypeAnnotation>,
|}>;
export type FunctionTypeAnnotationReturnArrayElementType =
| FunctionTypeAnnotationParamTypeAnnotation // TODO: What does FunctionTypeAnnotationParamTypeAnnotation have to do with function returns?
| TypeAliasTypeAnnotation;
export type TypeAliasTypeAnnotation = $ReadOnly<{|
type: 'TypeAliasTypeAnnotation',
name: string,
|}>;
export type FunctionTypeAnnotationParam = $ReadOnly<{|
nullable: boolean,
name: string,
typeAnnotation:
| FunctionTypeAnnotationParamTypeAnnotation
| TypeAliasTypeAnnotation,
|}>;
export type FunctionTypeAnnotationParamTypeAnnotation =
| $ReadOnly<{|
type:
| 'AnyTypeAnnotation'
| 'FunctionTypeAnnotation'
| PrimitiveTypeAnnotationType,
|}>
| $ReadOnly<{|
type: 'ReservedFunctionValueTypeAnnotation',
name: ReservedFunctionValueTypeName,
|}>
| $ReadOnly<{|
type: 'ArrayTypeAnnotation',
elementType:
| ?FunctionTypeAnnotationParamTypeAnnotation
| ?TypeAliasTypeAnnotation,
|}>
| $ReadOnly<{|
type: 'ObjectTypeAnnotation',
properties: ?$ReadOnlyArray<ObjectParamTypeAnnotation>,
|}>;
export type PrimitiveTypeAnnotationType =
| 'StringTypeAnnotation'
| 'NumberTypeAnnotation'
| 'Int32TypeAnnotation'
| 'DoubleTypeAnnotation'
| 'FloatTypeAnnotation'
| 'BooleanTypeAnnotation'
| 'GenericObjectTypeAnnotation';
export type PrimitiveTypeAnnotation = $ReadOnly<{|
type: PrimitiveTypeAnnotationType,
|}>;
export type ReservedFunctionValueTypeName = 'RootTag'; // Union with more custom types.
export type ObjectParamTypeAnnotation = $ReadOnly<{|
optional: boolean,
name: string,
typeAnnotation?:
| FunctionTypeAnnotationParamTypeAnnotation
| TypeAliasTypeAnnotation, // TODO (T67898313): Workaround for NativeLinking's use of union type, typeAnnotations should not be optional
|}>;