@@ -14,8 +14,7 @@ const mapNativeType = (/** @type {string} */ nativeType) => {
14
14
case 'Number' : {
15
15
return 'number'
16
16
}
17
- case 'Boolean' :
18
- case 'BigInt' : {
17
+ case 'Boolean' : {
19
18
return 'boolean'
20
19
}
21
20
case 'Object' : {
@@ -41,26 +40,19 @@ const mapNativeType = (/** @type {string} */ nativeType) => {
41
40
* @param {SourceCode } sourceCode
42
41
*/
43
42
function getComponentPropData ( prop , sourceCode ) {
44
- const unknownType = {
45
- name : prop . propName ,
46
- type : 'unknown' ,
47
- required : undefined ,
48
- defaultValue : undefined
49
- }
50
-
51
43
if ( prop . type !== 'object' ) {
52
- return unknownType
44
+ throw new Error ( `Unexpected prop type: ${ prop . type } .` )
53
45
}
54
46
const type = optionGetType ( prop . value , sourceCode )
55
47
if ( type === null ) {
56
- return unknownType
48
+ throw new Error ( `Unexpected prop type: ${ prop . type } .` )
57
49
}
58
50
const required = optionGetRequired ( prop . value )
59
51
const defaultValue = optionGetDefault ( prop . value )
60
52
61
53
return {
62
54
name : prop . propName ,
63
- type : mapNativeType ( type ) ,
55
+ type,
64
56
required,
65
57
defaultValue
66
58
}
@@ -74,7 +66,7 @@ function getComponentPropData(prop, sourceCode) {
74
66
function optionGetType ( node , sourceCode ) {
75
67
switch ( node . type ) {
76
68
case 'Identifier' : {
77
- return node . name
69
+ return mapNativeType ( node . name )
78
70
}
79
71
case 'ObjectExpression' : {
80
72
// foo: {
@@ -107,7 +99,17 @@ function optionGetType(node, sourceCode) {
107
99
return optionGetType ( typeProperty . value , sourceCode )
108
100
}
109
101
case 'ArrayExpression' : {
110
- return null
102
+ return node . elements
103
+ . map ( ( element ) => {
104
+ // TODO handle SpreadElement
105
+ if ( element === null || element . type === 'SpreadElement' ) {
106
+ return null
107
+ }
108
+
109
+ return optionGetType ( element , sourceCode )
110
+ } )
111
+ . filter ( Boolean )
112
+ . join ( ' | ' )
111
113
}
112
114
case 'FunctionExpression' :
113
115
case 'ArrowFunctionExpression' : {
@@ -217,7 +219,9 @@ module.exports = {
217
219
const definePropsType = `{ ${ propTypes
218
220
. map (
219
221
( { name, type, required, defaultValue } ) =>
220
- `${ name } ${ required === false || defaultValue ? '?' : '' } : ${ type } `
222
+ `${ name } ${
223
+ required === false || defaultValue ? '?' : ''
224
+ } : ${ type } `
221
225
)
222
226
. join ( ', ' ) } }`
223
227
@@ -227,7 +231,9 @@ module.exports = {
227
231
// add type annotation
228
232
if ( separateInterface ) {
229
233
const variableDeclarationNode = node . parent . parent
230
- if ( ! variableDeclarationNode ) return
234
+ if ( ! variableDeclarationNode ) {
235
+ return
236
+ }
231
237
232
238
yield fixer . insertTextBefore (
233
239
variableDeclarationNode ,
0 commit comments