@@ -29,7 +29,7 @@ module.exports = {
29
29
* @param {object } node - ObjectExpression node
30
30
* @param {string } propName - name of the prop to look for
31
31
*/
32
- function findObjectProp ( node , propName ) {
32
+ function findObjectProp ( node , propName , seenProps ) {
33
33
if ( ! node . properties ) {
34
34
return false ;
35
35
}
@@ -39,7 +39,11 @@ module.exports = {
39
39
} else if ( prop . type === 'ExperimentalSpreadProperty' ) {
40
40
const variable = findSpreadVariable ( prop . argument . name ) ;
41
41
if ( variable && variable . defs . length && variable . defs [ 0 ] . node . init ) {
42
- return findObjectProp ( variable . defs [ 0 ] . node . init , propName ) ;
42
+ if ( seenProps . indexOf ( prop . argument . name ) > - 1 ) {
43
+ return false ;
44
+ }
45
+ const newSeenProps = seenProps . concat ( prop . argument . name || [ ] ) ;
46
+ return findObjectProp ( variable . defs [ 0 ] . node . init , propName , newSeenProps ) ;
43
47
}
44
48
}
45
49
return false ;
@@ -57,7 +61,7 @@ module.exports = {
57
61
if ( attribute . type === 'JSXSpreadAttribute' ) {
58
62
const variable = findSpreadVariable ( attribute . argument . name ) ;
59
63
if ( variable && variable . defs . length && variable . defs [ 0 ] . node . init ) {
60
- return findObjectProp ( variable . defs [ 0 ] . node . init , propName ) ;
64
+ return findObjectProp ( variable . defs [ 0 ] . node . init , propName , [ ] ) ;
61
65
}
62
66
}
63
67
return attribute . name && attribute . name . name === propName ;
@@ -113,10 +117,10 @@ module.exports = {
113
117
}
114
118
}
115
119
116
- const dangerously = findObjectProp ( props , 'dangerouslySetInnerHTML' ) ;
120
+ const dangerously = findObjectProp ( props , 'dangerouslySetInnerHTML' , [ ] ) ;
117
121
118
122
if ( node . arguments . length === 2 ) {
119
- if ( findObjectProp ( props , 'children' ) ) {
123
+ if ( findObjectProp ( props , 'children' , [ ] ) ) {
120
124
hasChildren = true ;
121
125
}
122
126
} else {
0 commit comments