Skip to content

Commit a1fab8a

Browse files
authored
Merge pull request github#5581 from asgerf/js/dependency-info
Approved by esbena
2 parents 36bdee0 + 8c8e4e6 commit a1fab8a

File tree

4 files changed

+35
-11
lines changed

4 files changed

+35
-11
lines changed

javascript/ql/src/semmle/javascript/dependencies/Dependencies.qll

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,18 +127,22 @@ class ExternalNPMDependency extends NPMDependency {
127127
exists(PackageDependencies pkgdeps | this = pkgdeps.getPropValue(result))
128128
}
129129

130-
override string getVersion() {
130+
private string getVersionNumber() {
131131
exists(string versionRange | versionRange = this.(JSONString).getValue() |
132132
// extract a concrete version from the version range; currently,
133133
// we handle exact versions as well as `<=`, `>=`, `~` and `^` ranges
134134
result = versionRange.regexpCapture("(?:[><]=|[=~^])?v?(\\d+(\\.\\d+){1,2})", 1)
135-
or
136-
// if no version is specified, report version `unknown`
137-
result = "unknown" and
138-
(versionRange = "" or versionRange = "*")
139135
)
140136
}
141137

138+
override string getVersion() {
139+
result = getVersionNumber()
140+
or
141+
// if no version is specified or could not be parsed, report version `unknown`
142+
not exists(getVersionNumber()) and
143+
result = "unknown"
144+
}
145+
142146
override Import getAnImport() {
143147
exists(int depth | depth = importsDependency(result, getDeclaringPackage(), this) |
144148
// restrict to those results for which this is the closest matching dependency

javascript/ql/test/library-tests/NPM/src/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
"web": "http://mine.com"
88
}],
99
"dependencies": {
10-
"esprima": "*"
10+
"esprima": "*",
11+
"something": "1.2.3-alpha.beta",
12+
"foo": "! garbage string we \nreally can't parse %"
1113
},
1214
"devDependencies": {
1315
"mocha": "1.0"

javascript/ql/test/library-tests/NPM/tests.expected

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
dependencies
2-
| src/package.json:1:1:18:1 | {\\n "na ... "\\n }\\n} | esprima | * |
3-
| src/package.json:1:1:18:1 | {\\n "na ... "\\n }\\n} | mocha | 1.0 |
2+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | esprima | * |
3+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | foo | ! garbage string we \nreally can't parse % |
4+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | mocha | 1.0 |
5+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | something | 1.2.3-alpha.beta |
46
importedFile
57
| src/lib/tst2.js:1:1:1:13 | require("..") | src/index.js:0:0:0:0 | src/index.js |
68
| src/node_modules/nested/tst3.js:1:1:1:29 | require ... odule') | src/node_modules/third-party-module/fancy.js:0:0:0:0 | src/node_modules/third-party-module/fancy.js |
@@ -29,16 +31,27 @@ modules
2931
| src/node_modules/third-party-module | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
3032
npm
3133
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} | third-party-module | 23.4.0 |
32-
| src/package.json:1:1:18:1 | {\\n "na ... "\\n }\\n} | test-package | 0.1.0 |
34+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | test-package | 0.1.0 |
3335
getMainModule
3436
| src/node_modules/b/package.json:1:1:4:1 | {\\n "na ... "lib"\\n} | b | src/node_modules/b/lib/index.js:1:1:2:0 | <toplevel> |
3537
| src/node_modules/c/package.json:1:1:4:1 | {\\n "na ... src/"\\n} | c | src/node_modules/c/src/index.js:1:1:2:0 | <toplevel> |
3638
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} | d | src/node_modules/d/main.js:1:1:2:0 | <toplevel> |
3739
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
38-
| src/package.json:1:1:18:1 | {\\n "na ... "\\n }\\n} | test-package | src/index.js:1:1:4:0 | <toplevel> |
40+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | test-package | src/index.js:1:1:4:0 | <toplevel> |
3941
packageJSON
4042
| src/node_modules/b/package.json:1:1:4:1 | {\\n "na ... "lib"\\n} |
4143
| src/node_modules/c/package.json:1:1:4:1 | {\\n "na ... src/"\\n} |
4244
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} |
4345
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} |
44-
| src/package.json:1:1:18:1 | {\\n "na ... "\\n }\\n} |
46+
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} |
47+
dependencyInfo
48+
| src/index.js:1:1:4:0 | <toplevel> | test-package | 0.1.0 |
49+
| src/lib/tst2.js:1:1:1:14 | <toplevel> | test-package | 0.1.0 |
50+
| src/lib/tst.js:1:1:4:0 | <toplevel> | test-package | 0.1.0 |
51+
| src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> | third-party-module | 23.4.0 |
52+
| src/package.json:10:18:10:20 | "*" | esprima | unknown |
53+
| src/package.json:11:20:11:37 | "1.2.3-alpha.beta" | something | unknown |
54+
| src/package.json:12:14:12:57 | "! garb ... arse %" | foo | unknown |
55+
| src/package.json:15:16:15:20 | "1.0" | mocha | 1.0 |
56+
| src/tst2.js:1:1:1:13 | <toplevel> | test-package | 0.1.0 |
57+
| src/tst.js:1:1:2:38 | <toplevel> | test-package | 0.1.0 |

javascript/ql/test/library-tests/NPM/tests.ql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import javascript
2+
import semmle.javascript.dependencies.Dependencies
23

34
query predicate dependencies(PackageJSON pkgjson, string pkg, string version) {
45
pkgjson.declaresDependency(pkg, version)
@@ -24,3 +25,7 @@ query predicate getMainModule(PackageJSON pkg, string name, Module mod) {
2425
}
2526

2627
query predicate packageJSON(PackageJSON json) { any() }
28+
29+
query predicate dependencyInfo(Dependency dep, string name, string version) {
30+
dep.info(name, version)
31+
}

0 commit comments

Comments
 (0)