File tree Expand file tree Collapse file tree 1 file changed +21
-3
lines changed
javascript/ql/lib/semmle/javascript/frameworks Expand file tree Collapse file tree 1 file changed +21
-3
lines changed Original file line number Diff line number Diff line change @@ -13,12 +13,31 @@ module NextJS {
1313 */
1414 PackageJson getANextPackage ( ) { result .getDependencies ( ) .getADependency ( "next" , _) }
1515
16+ bindingset [ base, name]
17+ pragma [ inline_late]
18+ private Folder getOptionalFolder ( Folder base , string name ) {
19+ result = base .getFolder ( name )
20+ or
21+ not exists ( base .getFolder ( name ) ) and
22+ result = base
23+ }
24+
25+ private Folder packageRoot ( ) { result = getANextPackage ( ) .getFile ( ) .getParentContainer ( ) }
26+
27+ private Folder srcRoot ( ) { result = getOptionalFolder ( packageRoot ( ) , "src" ) }
28+
29+ private Folder appRoot ( ) { result = srcRoot ( ) .getFolder ( "app" ) }
30+
31+ private Folder pagesRoot ( ) { result = [ srcRoot ( ) , appRoot ( ) ] .getFolder ( "pages" ) }
32+
33+ private Folder apiRoot ( ) { result = [ pagesRoot ( ) , appRoot ( ) ] .getFolder ( "api" ) }
34+
1635 /**
1736 * Gets a "pages" folder in a `Next.js` application.
1837 * JavaScript files inside these folders are mapped to routes.
1938 */
2039 Folder getAPagesFolder ( ) {
21- result = getANextPackage ( ) . getFile ( ) . getParentContainer ( ) . getFolder ( "pages" )
40+ result = pagesRoot ( )
2241 or
2342 result = getAPagesFolder ( ) .getAFolder ( )
2443 }
@@ -217,8 +236,7 @@ module NextJS {
217236 * the App Router (`app/api/`) Next.js 13+ structures.
218237 */
219238 Folder apiFolder ( ) {
220- result =
221- getANextPackage ( ) .getFile ( ) .getParentContainer ( ) .getFolder ( [ "pages" , "app" ] ) .getFolder ( "api" ) or
239+ result = apiRoot ( ) or
222240 result = apiFolder ( ) .getAFolder ( )
223241 }
224242
You can’t perform that action at this time.
0 commit comments