Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 2342d3d

Browse files
authored
Merge pull request #3662 from asger-semmle/js/package-export-fixes
Approved by esbena
2 parents c9fc1a3 + 36c4803 commit 2342d3d

7 files changed

Lines changed: 36 additions & 13 deletions

File tree

javascript/ql/src/semmle/javascript/NodeModuleResolutionImpl.qll

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,20 +82,20 @@ File tryExtensions(Folder dir, string basename, int priority) {
8282
* Gets the main module described by `pkg` with the given `priority`.
8383
*/
8484
File resolveMainModule(PackageJSON pkg, int priority) {
85-
if exists(MainModulePath::of(pkg))
86-
then
87-
exists(PathExpr main | main = MainModulePath::of(pkg) |
88-
result = main.resolve() and priority = 0
89-
or
90-
result = tryExtensions(main.resolve(), "index", priority)
91-
or
92-
not exists(main.resolve()) and
93-
not exists(main.getExtension()) and
94-
exists(int n | n = main.getNumComponent() |
95-
result = tryExtensions(main.resolveUpTo(n - 1), main.getComponent(n - 1), priority)
96-
)
85+
exists(PathExpr main | main = MainModulePath::of(pkg) |
86+
result = main.resolve() and priority = 0
87+
or
88+
result = tryExtensions(main.resolve(), "index", priority)
89+
or
90+
not exists(main.resolve()) and
91+
not exists(main.getExtension()) and
92+
exists(int n | n = main.getNumComponent() |
93+
result = tryExtensions(main.resolveUpTo(n - 1), main.getComponent(n - 1), priority)
9794
)
98-
else result = tryExtensions(pkg.getFile().getParentContainer(), "index", priority)
95+
)
96+
or
97+
result =
98+
tryExtensions(pkg.getFile().getParentContainer(), "index", priority - prioritiesPerCandidate())
9999
}
100100

101101
/**

javascript/ql/src/semmle/javascript/PackageExports.qll

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,4 +68,9 @@ private DataFlow::Node getAnExportFromModule(Module mod) {
6868
result.analyze().getAValue() = mod.(NodeModule).getAModuleExportsValue()
6969
or
7070
exists(ASTNode export | result.getEnclosingExpr() = export | mod.exports(_, export))
71+
or
72+
exists(ExportDeclaration export |
73+
result = export.getSourceNode(_) and
74+
mod = export.getTopLevel()
75+
)
7176
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports.foo = function() {};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"main": "dist/does-not-exist.js"
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function exported() {}
2+
3+
function notExported() {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"main": "main.js"
3+
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
getTopmostPackageJSON
2+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} |
3+
| esmodules/package.json:1:1:3:1 | {\\n " ... n.js"\\n} |
24
| lib1/package.json:1:1:3:1 | {\\n " ... n.js"\\n} |
35
getAValueExportedBy
6+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} | absent_main/index.js:1:1:1:0 | this |
7+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} | absent_main/index.js:1:1:1:14 | module.exports |
8+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} | absent_main/index.js:1:1:1:18 | module.exports.foo |
9+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} | absent_main/index.js:1:22:1:21 | this |
10+
| absent_main/package.json:1:1:3:1 | {\\n " ... t.js"\\n} | absent_main/index.js:1:22:1:34 | function() {} |
11+
| esmodules/package.json:1:1:3:1 | {\\n " ... n.js"\\n} | esmodules/main.js:1:8:1:29 | functio ... ed() {} |
412
| lib1/package.json:1:1:3:1 | {\\n " ... n.js"\\n} | lib1/foo.js:1:1:1:0 | this |
513
| lib1/package.json:1:1:3:1 | {\\n " ... n.js"\\n} | lib1/foo.js:1:1:1:53 | module. ... in() {} |
614
| lib1/package.json:1:1:3:1 | {\\n " ... n.js"\\n} | lib1/foo.js:1:18:1:53 | functio ... in() {} |

0 commit comments

Comments
 (0)