JS: Treat default-export from .vue file as entry point

This commit is contained in:
Asger Feldthaus
2021-08-18 12:19:43 +02:00
parent b223049682
commit cd6a60dc70
2 changed files with 13 additions and 14 deletions

View File

@@ -14,6 +14,17 @@ module Vue {
override DataFlow::Node getARhs() { none() }
}
/** A value exported from a `.vue` file. */
private class VueExportEntryPoint extends API::EntryPoint {
VueExportEntryPoint() { this = "VueExportEntryPoint" }
override DataFlow::SourceNode getAUse() { none() }
override DataFlow::Node getARhs() {
result = any(SingleFileComponent c).getModule().getAnExportedValue("default")
}
}
/**
* Gets a reference to the `Vue` object.
*/
@@ -521,7 +532,8 @@ module Vue {
endcolumn = 0
}
private Module getModule() {
/** Gets the module defined by the `script` tag in this .vue file, if any. */
Module getModule() {
exists(HTML::ScriptElement elem |
xmlElements(elem, _, _, _, file) and // Avoid materializing all of Locatable.getFile()
result.getTopLevel() = elem.getScript()

View File

@@ -7,19 +7,6 @@ private import semmle.javascript.dataflow.internal.FlowSteps as FlowSteps
/** A minimal adapter for the `vue` model based on API nodes. */
private module VueAPI {
/** A value exported from a `.vue` file. */
private class VueExportEntryPoint extends API::EntryPoint {
VueExportEntryPoint() { this = "VueExportEntryPoint" }
override DataFlow::SourceNode getAUse() { none() }
override DataFlow::Node getARhs() {
exists(Module mod |
mod.getFile() instanceof Vue::VueFile and
result = mod.getAnExportedValue("default")
)
}
}
/**
* An API node representing the object passed to the Vue constructor `new Vue({...})`