mirror of
https://github.com/react/react-native.git
synced 2026-10-03 18:31:57 +08:00
Summary: This diff initializes the codegen flow parser using a proposal for some new syntaxes in flow file to handle missing information like: - Float vs Int32 - Bubbling Events vs Direct Events - Default props - Codegen options - Specifying the component name For a deep dive on the proposal see: https://fb.quip.com/kPYJAjCHxlgO Note: there are still some todos to follow up with: - Array props - Enum props - Object event arguments Note also: the parser code is a little rough, I didn't want spend too much time cleaning it up before we agreed on the format [General][Added] Add codegen flow parser Reviewed By: cpojer Differential Revision: D15417733 fbshipit-source-id: dd80887c0b2ac46fdc3da203214775facd204e28
141 lines
3.3 KiB
JavaScript
141 lines
3.3 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 ObjectPropertyType =
|
|
| $ReadOnly<{|
|
|
type: 'BooleanTypeAnnotation',
|
|
name: string,
|
|
optional: boolean,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'StringTypeAnnotation',
|
|
name: string,
|
|
optional: boolean,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'FloatTypeAnnotation',
|
|
name: string,
|
|
optional: boolean,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'Int32TypeAnnotation',
|
|
name: string,
|
|
optional: boolean,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'ObjectTypeAnnotation',
|
|
name: string,
|
|
optional: boolean,
|
|
properties: $ReadOnlyArray<ObjectPropertyType>,
|
|
|}>;
|
|
|
|
type PropTypeTypeAnnotation =
|
|
| $ReadOnly<{|
|
|
type: 'BooleanTypeAnnotation',
|
|
default: boolean,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'StringTypeAnnotation',
|
|
default: string,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'FloatTypeAnnotation',
|
|
default: number,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'Int32TypeAnnotation',
|
|
default: number,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'StringEnumTypeAnnotation',
|
|
default: string,
|
|
options: $ReadOnlyArray<{|
|
|
name: string,
|
|
|}>,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'NativePrimitiveTypeAnnotation',
|
|
name: 'ColorPrimitive' | 'ImageSourcePrimitive' | 'PointPrimitive',
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'ArrayTypeAnnotation',
|
|
elementType:
|
|
| $ReadOnly<{|
|
|
type: 'BooleanTypeAnnotation',
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'StringTypeAnnotation',
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'FloatTypeAnnotation',
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'Int32TypeAnnotation',
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'StringEnumTypeAnnotation',
|
|
options: $ReadOnlyArray<{|
|
|
name: string,
|
|
|}>,
|
|
|}>
|
|
| $ReadOnly<{|
|
|
type: 'NativePrimitiveTypeAnnotation',
|
|
name: 'ColorPrimitive' | 'ImageSourcePrimitive' | 'PointPrimitive',
|
|
|}>,
|
|
|}>;
|
|
|
|
export type PropTypeShape = $ReadOnly<{|
|
|
name: string,
|
|
optional: boolean,
|
|
typeAnnotation: PropTypeTypeAnnotation,
|
|
|}>;
|
|
|
|
export type EventTypeShape = $ReadOnly<{|
|
|
name: string,
|
|
bubblingType: 'direct' | 'bubble',
|
|
optional: boolean,
|
|
typeAnnotation: $ReadOnly<{|
|
|
type: 'EventTypeAnnotation',
|
|
argument?: $ReadOnly<{|
|
|
type: 'ObjectTypeAnnotation',
|
|
properties: $ReadOnlyArray<ObjectPropertyType>,
|
|
|}>,
|
|
|}>,
|
|
|}>;
|
|
|
|
export type OptionsShape = $ReadOnly<{|
|
|
interfaceOnly?: boolean,
|
|
isDeprecatedPaperComponentNameRCT?: boolean,
|
|
|}>;
|
|
|
|
export type ExtendsPropsShape = $ReadOnly<{|
|
|
type: 'ReactNativeBuiltInType',
|
|
knownTypeName: 'ReactNativeCoreViewProps',
|
|
|}>;
|
|
|
|
export type ComponentShape = $ReadOnly<{|
|
|
...OptionsShape,
|
|
extendsProps: $ReadOnlyArray<ExtendsPropsShape>,
|
|
events: $ReadOnlyArray<EventTypeShape>,
|
|
props: $ReadOnlyArray<PropTypeShape>,
|
|
|}>;
|
|
|
|
export type SchemaType = $ReadOnly<{|
|
|
modules: $ReadOnly<{
|
|
[module: string]: $ReadOnly<{|
|
|
components?: $ReadOnly<{
|
|
[component: string]: ComponentShape,
|
|
}>,
|
|
|}>,
|
|
}>,
|
|
|}>;
|