@@ -22,25 +22,27 @@ class PackageJson extends JsonObject {
22
22
pragma [ nomagic]
23
23
string getDeclaredPackageName ( ) { result = this .getPropStringValue ( "name" ) }
24
24
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
+
25
32
/**
26
33
* Gets the name of this package.
27
34
* 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`.
28
35
*/
29
36
string getPackageName ( ) {
30
37
result = this .getDeclaredPackageName ( )
31
38
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 ( ) )
44
46
)
45
47
}
46
48
@@ -405,5 +407,6 @@ class NpmPackage extends @folder {
405
407
*/
406
408
private Folder packageInternalParent ( Container c ) {
407
409
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 ( )
409
412
}
0 commit comments