Skip to content

Commit 44d64be

Browse files
committed
Add internal dependencies reports for Typescript
1 parent 0abea4f commit 44d64be

8 files changed

+622
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Cyclic Dependencies Breakdown Backward-Only for Typescript
2+
3+
MATCH (module:TS:Module)-[:EXPORTS]->(forwardSource:TS)-[:DEPENDS_ON]->(forwardTarget:TS)<-[:EXPORTS]-(dependentModule:TS:Module)
4+
MATCH (dependentModule)-[:EXPORTS]->(backwardSource:TS)-[:DEPENDS_ON]->(backwardTarget:TS)<-[:EXPORTS]-(module)
5+
// Get the project of the module if available
6+
OPTIONAL MATCH (project:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(module)
7+
OPTIONAL MATCH (dependentProject:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(dependentModule)
8+
WHERE module.globalFqn <> dependentModule.globalFqn
9+
WITH project.absoluteFileName AS projectFileName
10+
,replace(
11+
module.globalFqn
12+
,project.absoluteFileName + '/', ''
13+
) AS moduleName
14+
,dependentProject.absoluteFileName AS dependentProjectFileName
15+
,replace(
16+
dependentModule.globalFqn
17+
,dependentProject.absoluteFileName + '/', ''
18+
) AS dependentModulePathName
19+
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
20+
,collect(DISTINCT backwardTarget.name + '<-' + backwardSource.name) AS backwardDependencies
21+
WITH projectFileName
22+
,moduleName
23+
,dependentProjectFileName
24+
,dependentModulePathName
25+
,forwardDependencies
26+
,backwardDependencies
27+
,size(forwardDependencies) AS numberOfForwardDependencies
28+
,size(backwardDependencies) AS numberOfBackwardDependencies
29+
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
30+
WHERE (size(forwardDependencies) > size(backwardDependencies)
31+
OR (size(forwardDependencies) = size(backwardDependencies)
32+
AND size(moduleName) >= size(dependentModulePathName)))
33+
UNWIND backwardDependencies AS dependency
34+
RETURN projectFileName
35+
,moduleName
36+
,dependentProjectFileName
37+
,dependentModulePathName
38+
,dependency
39+
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
40+
,numberOfForwardDependencies AS numberForward
41+
,numberOfBackwardDependencies AS numberBackward
42+
ORDER BY forwardToBackwardBalance DESC, moduleName ASC
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
// Cyclic Dependencies Breakdown for Typescript
2+
3+
MATCH (module:TS:Module)-[:EXPORTS]->(forwardSource:TS)-[:DEPENDS_ON]->(forwardTarget:TS)<-[:EXPORTS]-(dependentModule:TS:Module)
4+
MATCH (dependentModule)-[:EXPORTS]->(backwardSource:TS)-[:DEPENDS_ON]->(backwardTarget:TS)<-[:EXPORTS]-(module)
5+
// Get the project of the module if available
6+
OPTIONAL MATCH (project:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(module)
7+
OPTIONAL MATCH (dependentProject:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(dependentModule)
8+
WHERE module.globalFqn <> dependentModule.globalFqn
9+
WITH project.absoluteFileName AS projectFileName
10+
,replace(
11+
module.globalFqn
12+
,project.absoluteFileName + '/', ''
13+
) AS moduleName
14+
,dependentProject.absoluteFileName AS dependentProjectFileName
15+
,replace(
16+
dependentModule.globalFqn
17+
,dependentProject.absoluteFileName + '/', ''
18+
) AS dependentModulePathName
19+
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
20+
,collect(DISTINCT backwardTarget.name + '<-' + backwardSource.name) AS backwardDependencies
21+
WITH projectFileName
22+
,moduleName
23+
,dependentProjectFileName
24+
,dependentModulePathName
25+
,forwardDependencies
26+
,backwardDependencies
27+
,size(forwardDependencies) AS numberOfForwardDependencies
28+
,size(backwardDependencies) AS numberOfBackwardDependencies
29+
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
30+
WHERE (size(forwardDependencies) > size(backwardDependencies)
31+
OR (size(forwardDependencies) = size(backwardDependencies)
32+
AND size(moduleName) >= size(dependentModulePathName)))
33+
UNWIND (backwardDependencies + forwardDependencies) AS dependency
34+
RETURN projectFileName
35+
,moduleName
36+
,dependentProjectFileName
37+
,dependentModulePathName
38+
,dependency
39+
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
40+
,numberOfForwardDependencies AS numberForward
41+
,numberOfBackwardDependencies AS numberBackward
42+
ORDER BY forwardToBackwardBalance DESC, moduleName ASC
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
//Cyclic Dependencies as List for Typescript
2+
3+
MATCH (module:TS:Module)-[:EXPORTS]->(forwardSource:TS)-[:DEPENDS_ON]->(forwardTarget:TS)<-[:EXPORTS]-(dependentModule:TS:Module)
4+
MATCH (dependentModule)-[:EXPORTS]->(backwardSource:TS)-[:DEPENDS_ON]->(backwardTarget:TS)<-[:EXPORTS]-(module)
5+
// Get the project of the module if available
6+
OPTIONAL MATCH (project:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(module)
7+
OPTIONAL MATCH (dependentProject:Directory)<-[:HAS_ROOT]-(:TS:Project)-[:CONTAINS]->(dependentModule)
8+
WHERE module.globalFqn <> dependentModule.globalFqn
9+
WITH project.absoluteFileName AS projectFileName
10+
,replace(
11+
module.globalFqn
12+
,project.absoluteFileName + '/', ''
13+
) AS moduleName
14+
,dependentProject.absoluteFileName AS dependentProjectFileName
15+
,replace(
16+
dependentModule.globalFqn
17+
,dependentProject.absoluteFileName + '/', ''
18+
) AS dependentModulePathName
19+
,collect(DISTINCT forwardSource.name + '->' + forwardTarget.name) AS forwardDependencies
20+
,collect(DISTINCT backwardTarget.name + '<-' + backwardSource.name) AS backwardDependencies
21+
WITH projectFileName
22+
,moduleName
23+
,dependentProjectFileName
24+
,dependentModulePathName
25+
,forwardDependencies
26+
,backwardDependencies
27+
,size(forwardDependencies) AS numberOfForwardDependencies
28+
,size(backwardDependencies) AS numberOfBackwardDependencies
29+
,size(forwardDependencies) + size(backwardDependencies) AS numberOfAllCyclicDependencies
30+
WHERE (size(forwardDependencies) > size(backwardDependencies)
31+
OR (size(forwardDependencies) = size(backwardDependencies)
32+
AND size(moduleName) >= size(dependentModulePathName)))
33+
RETURN projectFileName
34+
,moduleName
35+
,dependentProjectFileName
36+
,dependentModulePathName
37+
,toFloat(ABS(numberOfForwardDependencies - numberOfBackwardDependencies)) / numberOfAllCyclicDependencies AS forwardToBackwardBalance
38+
,numberOfForwardDependencies AS numberForward
39+
,numberOfBackwardDependencies AS numberBackward
40+
,forwardDependencies[0..9] AS forwardDependencyExamples
41+
,backwardDependencies[0..9] AS backwardDependencyExamples
42+
ORDER BY forwardToBackwardBalance DESC, moduleName ASC
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// How many elements compared to all existing are used by dependent Typescript modules?
2+
3+
MATCH (sourceModule:TS&Module)-[:EXPORTS]-(sourceElement:TS)
4+
MATCH (sourceElement)-[:DEPENDS_ON]->(dependentElement:TS&!Module&!ExternalModule)
5+
MATCH (dependentModule:TS&Module)-[:EXPORTS]->(dependentElement)
6+
WHERE sourceModule <> dependentModule
7+
MATCH (dependentModule)-[:EXPORTS]->(dependentModuleElement:TS)
8+
WITH sourceModule.name AS sourceModuleName
9+
,dependentModule.name AS dependentModuleName
10+
,COUNT(DISTINCT dependentElement.globalFqn) AS dependentElementsCount
11+
,COUNT(DISTINCT dependentModuleElement.globalFqn) AS dependentModuleElementsCount
12+
,collect(DISTINCT dependentElement.globalFqn)[0..4] AS dependentElementFullNameExamples
13+
,collect(DISTINCT dependentElement.name)[0..4] AS dependentElementNameExamples
14+
RETURN sourceModuleName
15+
,dependentModuleName
16+
,dependentElementsCount
17+
,dependentModuleElementsCount
18+
,toFloat(dependentElementsCount) / (dependentModuleElementsCount + 1E-38) AS elementUsagePercentage
19+
,dependentElementFullNameExamples
20+
,dependentElementNameExamples
21+
ORDER BY elementUsagePercentage ASC
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// List all existing internal Typescript modules
2+
3+
MATCH (internalModule:TS:Module)-[:EXPORTS]->(internalElement:TS)
4+
WITH internalModule.name AS moduleName
5+
,internalModule.globalFqn AS moduleFullQualifiedName
6+
,internalModule.incomingDependencies AS incomingDependencies
7+
,internalModule.outgoingDependencies AS outgoingDependencies
8+
,COUNT(DISTINCT internalElement.globalFqn) AS numberOfElements
9+
RETURN moduleName, numberOfElements, incomingDependencies, outgoingDependencies, moduleFullQualifiedName
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// List elements that are used by many different modules
2+
3+
MATCH (sourceModule:TS&Module)-[:EXPORTS]->(sourceElement:TS)
4+
MATCH (sourceElement)-[:DEPENDS_ON]->(dependentElement:TS&!Module&!ExternalModule)
5+
MATCH (dependentModule:TS&Module)-[:EXPORTS]->(dependentElement)
6+
WHERE sourceModule <> dependentModule
7+
WITH dependentElement
8+
,labels(dependentElement) AS dependentElementLabels
9+
,COUNT(DISTINCT sourceModule.globalFqn) AS numberOfUsingModules
10+
UNWIND dependentElementLabels AS dependentElementLabel
11+
WITH *
12+
WHERE NOT dependentElementLabel = 'TS' // Filter out generic TS label
13+
RETURN dependentElement.globalFqn AS fullQualifiedDependentElementName
14+
,dependentElement.moduleName AS dependentElementModuleName
15+
,dependentElement.name AS dependentElementName
16+
,dependentElementLabel AS dependentElementLabels
17+
,numberOfUsingModules
18+
ORDER BY numberOfUsingModules DESC, dependentElementName ASC

0 commit comments

Comments
 (0)