5
5
private import javascript
6
6
private import semmle.javascript.dataflow.internal.FlowSteps as FlowSteps
7
7
8
- /** A minimal adapter for the `vue` model based on API nodes. */
9
- private module VueAPI {
10
- /**
11
- * An API node representing the object passed to the Vue constructor `new Vue({...})`
12
- * or equivalent.
13
- */
14
- class VueConfigObject extends API:: Node {
15
- VueConfigObject ( ) { this .getARhs ( ) = any ( Vue:: Component c ) .getOwnOptionsObject ( ) }
16
-
17
- /** Gets an API node representing `this` in the Vue component. */
18
- API:: Node getAnInstanceRef ( ) {
19
- result = getAMember ( ) .getReceiver ( )
20
- or
21
- result = getAMember ( ) .getAMember ( ) .getReceiver ( )
22
- }
23
- }
24
- }
25
-
26
8
/**
27
9
* Provides classes and predicates for working with the `vuex` library.
28
10
*/
@@ -49,7 +31,7 @@ module Vuex {
49
31
API:: Node storeRef ( string namespace ) {
50
32
result = vuex ( ) .getMember ( "Store" ) .getInstance ( ) and namespace = ""
51
33
or
52
- result = any ( VueAPI :: VueConfigObject v ) .getAnInstanceRef ( ) .getMember ( "$store" ) and
34
+ result = any ( Vue :: Component v ) .getInstance ( ) .getMember ( "$store" ) and
53
35
namespace = ""
54
36
or
55
37
result =
@@ -132,13 +114,13 @@ module Vuex {
132
114
}
133
115
134
116
/** Gets the Vue component in which the generated functions are installed. */
135
- VueAPI :: VueConfigObject getVueConfigObject ( ) {
117
+ Vue :: Component getVueComponent ( ) {
136
118
exists ( DataFlow:: ObjectLiteralNode obj |
137
119
obj .getASpreadProperty ( ) = getReturn ( ) .getAUse ( ) and
138
- result .getAMember ( ) .getARhs ( ) = obj
120
+ result .getOwnOptions ( ) . getAMember ( ) .getARhs ( ) = obj
139
121
)
140
122
or
141
- result .getAMember ( ) .getARhs ( ) = this
123
+ result .getOwnOptions ( ) . getAMember ( ) .getARhs ( ) = this
142
124
}
143
125
}
144
126
@@ -153,7 +135,7 @@ module Vuex {
153
135
exists ( MapHelperCall call , string localName |
154
136
call .getHelperName ( ) = helperName and
155
137
call .hasMapping ( localName , storeName ) and
156
- result = call .getVueConfigObject ( ) .getAnInstanceRef ( ) .getMember ( localName ) and
138
+ result = call .getVueComponent ( ) .getInstance ( ) .getMember ( localName ) and
157
139
localName != "*"
158
140
)
159
141
}
@@ -339,10 +321,10 @@ module Vuex {
339
321
/**
340
322
* Gets the `x` in `mapState({name: () => x})`.
341
323
*/
342
- DataFlow:: Node mapStateHelperPred ( VueAPI :: VueConfigObject vue , string name ) {
324
+ DataFlow:: Node mapStateHelperPred ( Vue :: Component component , string name ) {
343
325
exists ( MapHelperCall call |
344
326
call .getHelperName ( ) = "mapState" and
345
- vue = call .getVueConfigObject ( ) and
327
+ component = call .getVueComponent ( ) and
346
328
result = call .getLastParameter ( ) .getMember ( name ) .getReturn ( ) .getARhs ( )
347
329
)
348
330
}
@@ -352,9 +334,9 @@ module Vuex {
352
334
* corresponding property access.
353
335
*/
354
336
predicate mapStateHelperStep ( DataFlow:: Node pred , DataFlow:: Node succ ) {
355
- exists ( VueAPI :: VueConfigObject vue , string name |
356
- pred = mapStateHelperPred ( vue , name ) and
357
- succ = pragma [ only_bind_out ] ( vue ) . getAnInstanceRef ( ) .getMember ( name ) .getAnImmediateUse ( )
337
+ exists ( Vue :: Component component , string name |
338
+ pred = mapStateHelperPred ( component , name ) and
339
+ succ = pragma [ only_bind_out ] ( component ) . getInstance ( ) .getMember ( name ) .getAnImmediateUse ( )
358
340
)
359
341
}
360
342
0 commit comments