Skip to content

Commit ce667f2

Browse files
committed
Distinguish between dev and non dev NPM package dependencies
1 parent 6121494 commit ce667f2

7 files changed

Lines changed: 81 additions & 17 deletions

File tree

cypher/Path_Finding/Set_Parameters_NPM.cypher renamed to cypher/Path_Finding/Set_Parameters_NonDevNpmPackage.cypher

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
:params {
44
"dependencies_projection_language":"NPM",
5-
"dependencies_projection": "npm-package-path-finding",
6-
"dependencies_projection_node": "Package",
5+
"dependencies_projection": "npm-non-dev-package-path-finding",
6+
"dependencies_projection_node": "NpmNonDevPackage",
77
"dependencies_projection_weight_property": "weightByDependencyType",
88
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Label NPM packages as NpmDevPackage or NpmNonDevPackage based on incoming DEPENDS_ON. Requires Link_npm_packages_with_depends_on_relationships.cypher
2+
// For each package node, calculate the maximum `weightByDependencyType` across incoming
3+
// `DEPENDS_ON` relationships. If the max is 1 -> label `NpmDevPackage`; if > 1 -> label
4+
// `NpmNonDevPackage`. If the property is missing or < 1 then no label is added.
5+
// weightByDependencyType= 1 is a dev dependency, 2 is a regular dependency, and 3 is a peer dependency.
6+
7+
MATCH (packageNode:NPM:Package)
8+
OPTIONAL MATCH (packageNode)<-[dependsOnRel:DEPENDS_ON]-()
9+
WITH packageNode, max(dependsOnRel.weightByDependencyType) AS maxWeight
10+
11+
CALL {
12+
WITH packageNode, maxWeight
13+
FOREACH (_ IN CASE WHEN maxWeight = 1 THEN [1] ELSE [] END |
14+
SET packageNode:NpmDevPackage
15+
)
16+
17+
FOREACH (_ IN CASE WHEN maxWeight > 1 THEN [1] ELSE [] END |
18+
SET packageNode:NpmNonDevPackage
19+
)
20+
} IN TRANSACTIONS OF 1000 ROWS
21+
22+
RETURN count(packageNode) AS evaluatedPackages,
23+
sum(CASE WHEN maxWeight = 1 THEN 1 ELSE 0 END) AS numberOfNpmDevPackages,
24+
sum(CASE WHEN maxWeight > 1 THEN 1 ELSE 0 END) AS numberOfNpmNonDevPackages,
25+
sum(CASE WHEN maxWeight IS NULL THEN 1 ELSE 0 END) AS numberOfPackagesWithMissingWeight,
26+
sum(CASE WHEN maxWeight < 1 AND maxWeight IS NOT NULL THEN 1 ELSE 0 END) AS numberOfPackagesWithWeightBelowOne

scripts/prepareAnalysis.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Remove_duplicate_CONTAINS_relations_bet
7979
execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Link_npm_dependencies_to_npm_packages.cypher"
8080
execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Link_npm_packages_with_depends_on_relationships.cypher"
8181
execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Enrich_npm_packages_with_dependency_counts.cypher"
82+
execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Label_npm_packages_by_dep_type.cypher"
8283
execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Link_projects_to_npm_packages.cypher"
8384
dataVerificationResult=$( execute_cypher "${TYPESCRIPT_CYPHER_DIR}/Verify_projects_linked_to_npm_packages.cypher" "${@}")
8485
if is_csv_column_greater_zero "${dataVerificationResult}" "unresolvedProjectsCount"; then

scripts/reports/CentralityCsv.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -439,12 +439,12 @@ if createUndirectedDependencyProjection "${MODULE_LANGUAGE}" "${MODULE_PROJECTIO
439439
runUndirectedCentralityAlgorithms "${MODULE_PROJECTION_UNDIRECTED}" "${MODULE_NODE}"
440440
fi
441441

442-
# -- NPM Package Centrality ---------------------------------------
442+
# -- Non Dev NPM Package Centrality ---------------------------------------
443443

444444
NPM_LANGUAGE="dependencies_projection_language=NPM"
445-
NPM_PROJECTION="dependencies_projection=npm-package-centrality"
446-
NPM_PROJECTION_UNDIRECTED="dependencies_projection=npm-package-centrality-undirected"
447-
NPM_NODE="dependencies_projection_node=Package"
445+
NPM_PROJECTION="dependencies_projection=npm-non_dev-package-centrality"
446+
NPM_PROJECTION_UNDIRECTED="dependencies_projection=npm-non_dev-package-centrality-undirected"
447+
NPM_NODE="dependencies_projection_node=NpmNonDevPackage"
448448
NPM_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
449449

450450
if createDirectedDependencyProjection "${NPM_LANGUAGE}" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"; then

scripts/reports/PathFindingCsv.sh

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,16 +140,28 @@ if createDirectedDependencyProjection "${MODULE_LANGUAGE}" "${MODULE_PROJECTION}
140140
runPathFindingAlgorithms "${MODULE_PROJECTION}" "${MODULE_NODE}" "${MODULE_WEIGHT}"
141141
fi
142142

143-
# -- NPM Package Path Finding -------------------------------
143+
# -- Non Dev NPM Package Path Finding -------------------------------
144144

145145
NPM_LANGUAGE="dependencies_projection_language=NPM"
146-
NPM_PROJECTION="dependencies_projection=npm-package-path-finding"
147-
NPM_NODE="dependencies_projection_node=Package"
146+
NPM_PROJECTION="dependencies_projection=npm-non-dev-package-path-finding"
147+
NPM_NODE="dependencies_projection_node=NpmNonDevPackage"
148148
NPM_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
149149

150150
if createDirectedDependencyProjection "${NPM_LANGUAGE}" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"; then
151151
runPathFindingAlgorithms "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"
152152
fi
153+
154+
# - Dev NPM Package Path Finding -------------------------------
155+
156+
NPM_DEV_LANGUAGE="dependencies_projection_language=NPM"
157+
NPM_DEV_PROJECTION="dependencies_projection=npm-dev-package-path-finding"
158+
NPM_DEV_NODE="dependencies_projection_node=NpmDevPackage"
159+
NPM_DEV_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
160+
161+
if createDirectedDependencyProjection "${NPM_DEV_LANGUAGE}" "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}" "${NPM_DEV_WEIGHT}"; then
162+
runPathFindingAlgorithms "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}" "${NPM_DEV_WEIGHT}"
163+
fi
164+
153165
# ---------------------------------------------------------------
154166

155167
# Clean-up after report generation. Empty reports will be deleted.

scripts/reports/PathFindingVisualization.sh

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,27 +90,50 @@ if createDirectedDependencyProjection "${MODULE_LANGUAGE}" "${MODULE_PROJECTION}
9090
source "${VISUALIZATION_SCRIPTS_DIR}/visualizeQueryResults.sh" "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
9191
fi
9292

93-
# NPM Packages: Longest Paths Visualization
93+
# Non Dev NPM Packages: Longest Paths Visualization
9494
NPM_LANGUAGE="dependencies_projection_language=NPM"
95-
NPM_PROJECTION="dependencies_projection=npm-package-path-finding"
96-
NPM_NODE="dependencies_projection_node=Package"
95+
NPM_PROJECTION="dependencies_projection=npm-non_dev-package-path-finding"
96+
NPM_NODE="dependencies_projection_node=NpmNonDevPackage"
9797
NPM_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
9898

9999
if createDirectedDependencyProjection "${NPM_LANGUAGE}" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"; then
100100
# Determines topological sort max distance from source if not already done for level info in visualization.
101101
execute_cypher_queries_until_results "${TOPOLOGICAL_SORT_CYPHER_DIR}/Topological_Sort_Exists.cypher" \
102102
"${TOPOLOGICAL_SORT_CYPHER_DIR}/Topological_Sort_Write.cypher" "${NPM_PROJECTION}" "${NPM_NODE}"
103103

104-
reportName="NpmPackageLongestPathsIsolated"
104+
reportName="NpmNonDevPackageLongestPathsIsolated"
105105
echo "${SCRIPT_NAME}: Creating visualization ${reportName}..."
106106
execute_cypher "${PATH_FINDINGS_CYPHER_DIR}/Path_Finding_6_Longest_paths_for_graphviz.cypher" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}" > "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
107107
source "${VISUALIZATION_SCRIPTS_DIR}/visualizeQueryResults.sh" "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
108108

109-
reportName="NpmPackageLongestPaths"
109+
reportName="NpmNonDevPackageLongestPaths"
110110
echo "${SCRIPT_NAME}: Creating visualization ${reportName}..."
111111
execute_cypher "${PATH_FINDINGS_CYPHER_DIR}/Path_Finding_6_Longest_paths_contributors_for_graphviz.cypher" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}" > "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
112112
source "${VISUALIZATION_SCRIPTS_DIR}/visualizeQueryResults.sh" "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
113113
fi
114114

115+
# Dev NPM Packages: Longest Paths Visualization
116+
117+
NPM_DEV_LANGUAGE="dependencies_projection_language=NPM"
118+
NPM_DEV_PROJECTION="dependencies_projection=npm-dev-package-path-finding"
119+
NPM_DEV_NODE="dependencies_projection_node=NpmDevPackage"
120+
NPM_DEV_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
121+
122+
if createDirectedDependencyProjection "${NPM_DEV_LANGUAGE}" "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}" "${NPM_DEV_WEIGHT}"; then
123+
# Determines topological sort max distance from source if not already done for level info in visualization.
124+
execute_cypher_queries_until_results "${TOPOLOGICAL_SORT_CYPHER_DIR}/Topological_Sort_Exists.cypher" \
125+
"${TOPOLOGICAL_SORT_CYPHER_DIR}/Topological_Sort_Write.cypher" "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}"
126+
127+
reportName="NpmDevPackageLongestPathsIsolated"
128+
echo "${SCRIPT_NAME}: Creating visualization ${reportName}..."
129+
execute_cypher "${PATH_FINDINGS_CYPHER_DIR}/Path_Finding_6_Longest_paths_for_graphviz.cypher" "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}" "${NPM_DEV_WEIGHT}" > "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
130+
source "${VISUALIZATION_SCRIPTS_DIR}/visualizeQueryResults.sh" "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
131+
132+
reportName="NpmDevPackageLongestPaths"
133+
echo "${SCRIPT_NAME}: Creating visualization ${reportName}..."
134+
execute_cypher "${PATH_FINDINGS_CYPHER_DIR}/Path_Finding_6_Longest_paths_contributors_for_graphviz.cypher" "${NPM_DEV_PROJECTION}" "${NPM_DEV_NODE}" "${NPM_DEV_WEIGHT}" > "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
135+
source "${VISUALIZATION_SCRIPTS_DIR}/visualizeQueryResults.sh" "${FULL_REPORT_DIRECTORY}/${reportName}.csv"
136+
fi
137+
115138
# Clean-up after report generation. Empty reports will be deleted.
116139
source "${SCRIPTS_DIR}/cleanupAfterReportGeneration.sh" "${FULL_REPORT_DIRECTORY}"

scripts/reports/TopologicalSortCsv.sh

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,17 +103,19 @@ if createDirectedDependencyProjection "${MODULE_LANGUAGE}" "${MODULE_PROJECTION}
103103
time topologicalSort "${MODULE_PROJECTION}" "${MODULE_NODE}" "${MODULE_WEIGHT}"
104104
fi
105105

106-
# -- NPM Package Topology ---------------------------------------
106+
# -- Non Dev NPM Package Topology ---------------------------------------
107107

108108
NPM_LANGUAGE="dependencies_projection_language=NPM"
109-
NPM_PROJECTION="dependencies_projection=npm-package-topology"
110-
NPM_NODE="dependencies_projection_node=Package"
109+
NPM_PROJECTION="dependencies_projection=npm-non_dev-package-topology"
110+
NPM_NODE="dependencies_projection_node=NpmNonDevPackage"
111111
NPM_WEIGHT="dependencies_projection_weight_property=weightByDependencyType"
112112

113113
if createDirectedDependencyProjection "${NPM_LANGUAGE}" "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"; then
114114
time topologicalSort "${NPM_PROJECTION}" "${NPM_NODE}" "${NPM_WEIGHT}"
115115
fi
116116

117+
# ----------------------------------------------------------------------
118+
117119
# Clean-up after report generation. Empty reports will be deleted.
118120
source "${SCRIPTS_DIR}/cleanupAfterReportGeneration.sh" "${FULL_REPORT_DIRECTORY}"
119121

0 commit comments

Comments
 (0)