55private import javascript
66private import semmle.javascript.dataflow.internal.FlowSteps as FlowSteps
77
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-
268/**
279 * Provides classes and predicates for working with the `vuex` library.
2810 */
@@ -49,7 +31,7 @@ module Vuex {
4931 API:: Node storeRef ( string namespace ) {
5032 result = vuex ( ) .getMember ( "Store" ) .getInstance ( ) and namespace = ""
5133 or
52- result = any ( VueAPI :: VueConfigObject v ) .getAnInstanceRef ( ) .getMember ( "$store" ) and
34+ result = any ( Vue :: Component v ) .getInstance ( ) .getMember ( "$store" ) and
5335 namespace = ""
5436 or
5537 result =
@@ -132,13 +114,13 @@ module Vuex {
132114 }
133115
134116 /** Gets the Vue component in which the generated functions are installed. */
135- VueAPI :: VueConfigObject getVueConfigObject ( ) {
117+ Vue :: Component getVueComponent ( ) {
136118 exists ( DataFlow:: ObjectLiteralNode obj |
137119 obj .getASpreadProperty ( ) = getReturn ( ) .getAUse ( ) and
138- result .getAMember ( ) .getARhs ( ) = obj
120+ result .getOwnOptions ( ) . getAMember ( ) .getARhs ( ) = obj
139121 )
140122 or
141- result .getAMember ( ) .getARhs ( ) = this
123+ result .getOwnOptions ( ) . getAMember ( ) .getARhs ( ) = this
142124 }
143125 }
144126
@@ -153,7 +135,7 @@ module Vuex {
153135 exists ( MapHelperCall call , string localName |
154136 call .getHelperName ( ) = helperName and
155137 call .hasMapping ( localName , storeName ) and
156- result = call .getVueConfigObject ( ) .getAnInstanceRef ( ) .getMember ( localName ) and
138+ result = call .getVueComponent ( ) .getInstance ( ) .getMember ( localName ) and
157139 localName != "*"
158140 )
159141 }
@@ -339,10 +321,10 @@ module Vuex {
339321 /**
340322 * Gets the `x` in `mapState({name: () => x})`.
341323 */
342- DataFlow:: Node mapStateHelperPred ( VueAPI :: VueConfigObject vue , string name ) {
324+ DataFlow:: Node mapStateHelperPred ( Vue :: Component component , string name ) {
343325 exists ( MapHelperCall call |
344326 call .getHelperName ( ) = "mapState" and
345- vue = call .getVueConfigObject ( ) and
327+ component = call .getVueComponent ( ) and
346328 result = call .getLastParameter ( ) .getMember ( name ) .getReturn ( ) .getARhs ( )
347329 )
348330 }
@@ -352,9 +334,9 @@ module Vuex {
352334 * corresponding property access.
353335 */
354336 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 ( )
358340 )
359341 }
360342
0 commit comments