Skip to content

Commit e658177

Browse files
authored
Merge pull request github#12975 from tyage/support-sub-modules
JS: Support sub modules
2 parents 4540ac8 + 653cd86 commit e658177

File tree

8 files changed

+49
-2
lines changed

8 files changed

+49
-2
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
category: minorAnalysis
3+
---
4+
5+
- Added a support of sub modules in `node_modules`.

javascript/ql/lib/semmle/javascript/NPM.qll

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,26 @@ class PackageJson extends JsonObject {
1212
this.isTopLevel()
1313
}
1414

15-
/** Gets the name of this package. */
16-
string getPackageName() { result = this.getPropStringValue("name") }
15+
/**
16+
* Gets the name of this package.
17+
* If the package is located under the package `pkg1` and its relative path is `foo/bar`, then the resulting package name will be `pkg1/foo/bar`.
18+
*/
19+
string getPackageName() {
20+
result = this.getPropStringValue("name")
21+
or
22+
exists(
23+
PackageJson parentPkg, Container currentDir, Container parentDir, string parentPkgName,
24+
string pkgNameDiff
25+
|
26+
currentDir = this.getJsonFile().getParentContainer() and
27+
parentDir = parentPkg.getJsonFile().getParentContainer() and
28+
parentPkgName = parentPkg.getPropStringValue("name") and
29+
parentDir.getAChildContainer+() = currentDir and
30+
pkgNameDiff = currentDir.getAbsolutePath().suffix(parentDir.getAbsolutePath().length()) and
31+
not exists(pkgNameDiff.indexOf("/node_modules/")) and
32+
result = parentPkgName + pkgNameDiff
33+
)
34+
}
1735

1836
/** Gets the version of this package. */
1937
string getVersion() { result = this.getPropStringValue("version") }

javascript/ql/test/library-tests/NPM/src/node_modules/parent-module/main.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

javascript/ql/test/library-tests/NPM/src/node_modules/parent-module/sub-module/main.js

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

javascript/ql/test/library-tests/NPM/src/node_modules/parent-module/sub-module/package.json

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
require("parent-module");
2+
require("parent-module/sub-module");

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ importedFile
88
| 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 |
99
| src/node_modules/nested/tst3.js:2:1:2:12 | require('a') | src/node_modules/nested/node_modules/a/index.js:0:0:0:0 | src/node_modules/nested/node_modules/a/index.js |
1010
| src/node_modules/tst2.js:1:1:1:38 | require ... cy.js') | src/node_modules/third-party-module/fancy.js:0:0:0:0 | src/node_modules/third-party-module/fancy.js |
11+
| src/test-submodule.js:1:1:1:24 | require ... odule") | src/node_modules/parent-module/main.js:0:0:0:0 | src/node_modules/parent-module/main.js |
12+
| src/test-submodule.js:2:1:2:35 | require ... odule") | src/node_modules/parent-module/sub-module/main.js:0:0:0:0 | src/node_modules/parent-module/sub-module/main.js |
1113
| src/tst2.js:1:1:1:12 | require(".") | src/index.js:0:0:0:0 | src/index.js |
1214
| src/tst.js:1:1:1:38 | require ... cy.js') | src/node_modules/third-party-module/fancy.js:0:0:0:0 | src/node_modules/third-party-module/fancy.js |
1315
| src/tst.js:2:1:2:37 | require ... ckage') | src/node_modules/third-party-module/package.json:0:0:0:0 | src/node_modules/third-party-module/package.json |
@@ -16,18 +18,24 @@ importedModule
1618
| src/node_modules/nested/tst3.js:1:1:1:29 | require ... odule') | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
1719
| src/node_modules/nested/tst3.js:2:1:2:12 | require('a') | src/node_modules/nested/node_modules/a/index.js:1:1:1:25 | <toplevel> |
1820
| src/node_modules/tst2.js:1:1:1:38 | require ... cy.js') | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
21+
| src/test-submodule.js:1:1:1:24 | require ... odule") | src/node_modules/parent-module/main.js:1:1:2:0 | <toplevel> |
22+
| src/test-submodule.js:2:1:2:35 | require ... odule") | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
1923
| src/tst2.js:1:1:1:12 | require(".") | src/index.js:1:1:4:0 | <toplevel> |
2024
| src/tst.js:1:1:1:38 | require ... cy.js') | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
2125
modules
2226
| src | test-package | src/index.js:1:1:4:0 | <toplevel> |
2327
| src | test-package | src/lib/tst2.js:1:1:1:14 | <toplevel> |
2428
| src | test-package | src/lib/tst.js:1:1:4:0 | <toplevel> |
29+
| src | test-package | src/test-submodule.js:1:1:3:0 | <toplevel> |
2530
| src | test-package | src/tst2.js:1:1:1:13 | <toplevel> |
2631
| src | test-package | src/tst.js:1:1:2:38 | <toplevel> |
2732
| src/node_modules/b | b | src/node_modules/b/lib/index.js:1:1:2:0 | <toplevel> |
2833
| src/node_modules/b | b | src/node_modules/b/lib/util.ts:1:1:2:0 | <toplevel> |
2934
| src/node_modules/c | c | src/node_modules/c/src/index.js:1:1:2:0 | <toplevel> |
3035
| src/node_modules/d | d | src/node_modules/d/main.js:1:1:2:0 | <toplevel> |
36+
| src/node_modules/parent-module | parent-module | src/node_modules/parent-module/main.js:1:1:2:0 | <toplevel> |
37+
| src/node_modules/parent-module | parent-module | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
38+
| src/node_modules/parent-module/sub-module | parent-module/sub-module | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
3139
| src/node_modules/third-party-module | third-party-module | src/node_modules/third-party-module/fancy.js:1:1:4:0 | <toplevel> |
3240
npm
3341
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} | third-party-module | 23.4.0 |
@@ -36,12 +44,16 @@ getMainModule
3644
| 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> |
3745
| 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> |
3846
| 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> |
47+
| src/node_modules/parent-module/package.json:1:1:4:1 | {\\n "na ... n.js"\\n} | parent-module | src/node_modules/parent-module/main.js:1:1:2:0 | <toplevel> |
48+
| src/node_modules/parent-module/sub-module/package.json:1:1:3:1 | {\\n "ma ... n.js"\\n} | parent-module/sub-module | src/node_modules/parent-module/sub-module/main.js:1:1:2:0 | <toplevel> |
3949
| 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> |
4050
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} | test-package | src/index.js:1:1:4:0 | <toplevel> |
4151
packageJson
4252
| src/node_modules/b/package.json:1:1:4:1 | {\\n "na ... "lib"\\n} |
4353
| src/node_modules/c/package.json:1:1:4:1 | {\\n "na ... src/"\\n} |
4454
| src/node_modules/d/package.json:1:1:4:1 | {\\n "na ... main"\\n} |
55+
| src/node_modules/parent-module/package.json:1:1:4:1 | {\\n "na ... n.js"\\n} |
56+
| src/node_modules/parent-module/sub-module/package.json:1:1:3:1 | {\\n "ma ... n.js"\\n} |
4557
| src/node_modules/third-party-module/package.json:1:1:5:1 | {\\n "na ... y.js"\\n} |
4658
| src/package.json:1:1:20:1 | {\\n "na ... "\\n }\\n} |
4759
dependencyInfo
@@ -53,5 +65,6 @@ dependencyInfo
5365
| src/package.json:11:20:11:37 | "1.2.3-alpha.beta" | something | unknown |
5466
| src/package.json:12:14:12:57 | "! garb ... arse %" | foo | unknown |
5567
| src/package.json:15:16:15:20 | "1.0" | mocha | 1.0 |
68+
| src/test-submodule.js:1:1:3:0 | <toplevel> | test-package | 0.1.0 |
5669
| src/tst2.js:1:1:1:13 | <toplevel> | test-package | 0.1.0 |
5770
| src/tst.js:1:1:2:38 | <toplevel> | test-package | 0.1.0 |

0 commit comments

Comments
 (0)