@@ -22,25 +22,27 @@ class PackageJson extends JsonObject {
2222 pragma [ nomagic]
2323 string getDeclaredPackageName ( ) { result = this .getPropStringValue ( "name" ) }
2424
25+ /**
26+ * Gets the nearest `package.json` file found in the parent directories, if any.
27+ */
28+ PackageJson getEnclosingPackage ( ) {
29+ result .getFolder ( ) = packageInternalParent * ( this .getFolder ( ) .getParentContainer ( ) )
30+ }
31+
2532 /**
2633 * Gets the name of this package.
2734 * 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`.
2835 */
2936 string getPackageName ( ) {
3037 result = this .getDeclaredPackageName ( )
3138 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 ( )
39+ not exists ( this .getDeclaredPackageName ( ) ) and
40+ exists ( PackageJson parent |
41+ parent = this .getEnclosingPackage ( ) and
42+ not parent .isPrivate ( ) and
43+ result =
44+ parent .getDeclaredPackageName ( ) +
45+ this .getFolder ( ) .getRelativePath ( ) .suffix ( parent .getFolder ( ) .getRelativePath ( ) .length ( ) )
4446 )
4547 }
4648
@@ -405,5 +407,6 @@ class NpmPackage extends @folder {
405407 */
406408private Folder packageInternalParent ( Container c ) {
407409 result = c .getParentContainer ( ) and
408- not c .( Folder ) .getBaseName ( ) = "node_modules"
410+ not c .( Folder ) .getBaseName ( ) = "node_modules" and
411+ not c = any ( PackageJson pkg ) .getFolder ( )
409412}
0 commit comments