Skip to content

Commit 8b93162

Browse files
committed
add edge from root type MkHasUnderlyingType
1 parent 40ec23c commit 8b93162

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

javascript/ql/src/semmle/javascript/ApiGraphs.qll

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,8 @@ module API {
386386
imports(_, m)
387387
or
388388
m = any(CanonicalName n | isUsed(n)).getExternalModuleName()
389+
or
390+
any(TypeAnnotation n).hasQualifiedName(m, _)
389391
} or
390392
MkClassInstance(DataFlow::ClassNode cls) { cls = trackDefNode(_) and hasSemantics(cls) } or
391393
MkAsyncFuncResult(DataFlow::FunctionNode f) {
@@ -902,6 +904,12 @@ module API {
902904
succ in [mkCanonicalNameDef(cn2), mkCanonicalNameUse(cn2)]
903905
)
904906
or
907+
exists(string moduleName, string exportName |
908+
pred = MkModuleImport(moduleName) and
909+
lbl = Label::member(exportName) and
910+
succ = MkHasUnderlyingType(moduleName, exportName)
911+
)
912+
or
905913
exists(DataFlow::Node nd, DataFlow::FunctionNode f |
906914
pred = MkDef(nd) and
907915
f = trackDefNode(nd) and
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
| mongodb | Collection | index.ts:14:3:14:17 | getCollection() |
22
| mongoose | Model | index.ts:22:3:22:20 | getMongooseModel() |
33
| mongoose | Query | index.ts:23:3:23:20 | getMongooseQuery() |
4+
| puppeteer | Browser | index.ts:30:22:30:33 | this.browser |

javascript/ql/test/ApiGraphs/typed/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,11 @@ app.post("/find", (req, res) => {
2222
getMongooseModel().find({ id: v }); /* def (parameter 0 (member find (instance (member Model (member exports (module mongoose)))))) */
2323
getMongooseQuery().find({ id: v }); /* def (parameter 0 (member find (instance (member Query (member exports (module mongoose)))))) */
2424
});
25+
26+
import * as puppeteer from 'puppeteer';
27+
class Renderer {
28+
private browser: puppeteer.Browser;
29+
foo(): void {
30+
const page = this.browser.newPage(); /* use (instance (member Browser (member exports (module puppeteer)))) */
31+
}
32+
}

0 commit comments

Comments
 (0)