@@ -22,25 +22,25 @@ class PackageJson extends JsonObject {
2222 pragma [ nomagic]
2323 string getDeclaredPackageName ( ) { result = this .getPropStringValue ( "name" ) }
2424
25+ private PackageJson getEnclosingNamedPackage ( ) {
26+ result .getFolder ( ) = packageInternalParent * ( this .getFolder ( ) .getParentContainer ( ) ) and
27+ not result .isPrivate ( ) and
28+ exists ( result .getDeclaredPackageName ( ) )
29+ }
30+
2531 /**
2632 * Gets the name of this package.
2733 * 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`.
2834 */
2935 string getPackageName ( ) {
3036 result = this .getDeclaredPackageName ( )
3137 or
32- exists (
33- PackageJson parentPkg , Container currentDir , Container parentDir , string parentPkgName ,
34- string pkgNameDiff
35- |
36- currentDir = this .getJsonFile ( ) .getParentContainer ( ) and
37- parentDir = parentPkg .getJsonFile ( ) .getParentContainer ( ) and
38- parentPkgName = parentPkg .getPropStringValue ( "name" ) and
39- parentDir .getAChildContainer + ( ) = currentDir and
40- pkgNameDiff = currentDir .getAbsolutePath ( ) .suffix ( parentDir .getAbsolutePath ( ) .length ( ) ) and
41- not exists ( pkgNameDiff .indexOf ( "/node_modules/" ) ) and
42- result = parentPkgName + pkgNameDiff and
43- not parentPkg .isPrivate ( )
38+ not exists ( this .getDeclaredPackageName ( ) ) and
39+ exists ( PackageJson parent |
40+ parent = this .getEnclosingNamedPackage ( ) and
41+ result =
42+ parent .getDeclaredPackageName ( ) +
43+ this .getFolder ( ) .getRelativePath ( ) .suffix ( parent .getFolder ( ) .getRelativePath ( ) .length ( ) )
4444 )
4545 }
4646
@@ -405,5 +405,6 @@ class NpmPackage extends @folder {
405405 */
406406private Folder packageInternalParent ( Container c ) {
407407 result = c .getParentContainer ( ) and
408- not c .( Folder ) .getBaseName ( ) = "node_modules"
408+ not c .( Folder ) .getBaseName ( ) = "node_modules" and
409+ not c = any ( PackageJson pkg ) .getFolder ( )
409410}
0 commit comments