1
1
var namedTypes = {
2
2
'NumberTypeAnnotation' : 'number' ,
3
3
'BooleanTypeAnnotation' : 'boolean' ,
4
- 'ObjectTypeAnnotation' : 'Object' ,
5
4
'StringTypeAnnotation' : 'string'
6
5
} ;
7
6
8
7
var oneToOne = {
9
8
'AnyTypeAnnotation' : 'AllLiteral' ,
9
+ 'MixedTypeAnnotation' : 'AllLiteral' ,
10
10
'NullLiteralTypeAnnotation' : 'NullLiteral' ,
11
11
'VoidTypeAnnotation' : 'VoidLiteral'
12
12
} ;
@@ -17,6 +17,14 @@ var literalTypes = {
17
17
'StringLiteralTypeAnnotation' : 'StringLiteral'
18
18
} ;
19
19
20
+ function propertyToField ( property ) {
21
+ return {
22
+ type : 'FieldType' ,
23
+ key : property . key . name ,
24
+ value : flowDoctrine ( property . value )
25
+ } ;
26
+ }
27
+
20
28
/**
21
29
* Babel parses Flow annotations in JavaScript into AST nodes. documentation.js uses
22
30
* Babel to parse JavaScript. This method restructures those Babel-generated
@@ -71,6 +79,20 @@ function flowDoctrine(type) {
71
79
applications : [ flowDoctrine ( type . elementType ) ]
72
80
} ;
73
81
82
+ // (y: number) => bool
83
+ case 'FunctionTypeAnnotation' :
84
+ return {
85
+ type : 'FunctionType' ,
86
+ params : type . params . map ( function ( param ) {
87
+ return {
88
+ type : 'ParameterType' ,
89
+ name : param . name . name ,
90
+ expression : flowDoctrine ( param . typeAnnotation )
91
+ } ;
92
+ } ) ,
93
+ result : flowDoctrine ( type . returnType )
94
+ } ;
95
+
74
96
case 'GenericTypeAnnotation' :
75
97
if ( type . typeParameters ) {
76
98
return {
@@ -83,6 +105,19 @@ function flowDoctrine(type) {
83
105
} ;
84
106
}
85
107
108
+ return {
109
+ type : 'NameExpression' ,
110
+ name : type . id . name
111
+ } ;
112
+
113
+ case 'ObjectTypeAnnotation' :
114
+ if ( type . properties ) {
115
+ return {
116
+ type : 'RecordType' ,
117
+ fields : type . properties . map ( propertyToField )
118
+ } ;
119
+ }
120
+
86
121
return {
87
122
type : 'NameExpression' ,
88
123
name : type . id . name
0 commit comments