@contrast/contrast 1.0.6 → 1.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/.prettierignore +0 -6
  2. package/dist/audit/catalogueApplication/catalogueApplication.js +23 -5
  3. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -19
  4. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +98 -37
  5. package/dist/audit/languageAnalysisEngine/report/models/reportListModel.js +2 -1
  6. package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +4 -3
  7. package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +3 -0
  8. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +87 -19
  9. package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +46 -16
  10. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +57 -19
  11. package/dist/audit/save.js +37 -0
  12. package/dist/commands/audit/auditConfig.js +0 -16
  13. package/dist/commands/audit/auditController.js +18 -11
  14. package/dist/commands/audit/help.js +31 -25
  15. package/dist/commands/audit/processAudit.js +3 -3
  16. package/dist/commands/audit/saveFile.js +8 -4
  17. package/dist/commands/scan/sca/scaAnalysis.js +55 -10
  18. package/dist/common/HTTPClient.js +64 -23
  19. package/dist/common/errorHandling.js +6 -1
  20. package/dist/common/versionChecker.js +20 -5
  21. package/dist/constants/constants.js +7 -2
  22. package/dist/constants/locales.js +35 -38
  23. package/dist/constants.js +20 -13
  24. package/dist/index.js +55 -45
  25. package/dist/lambda/analytics.js +11 -0
  26. package/dist/lambda/lambda.js +38 -4
  27. package/dist/lambda/types.js +13 -0
  28. package/dist/sbom/generateSbom.js +5 -4
  29. package/dist/scaAnalysis/common/formatMessage.js +44 -1
  30. package/dist/scaAnalysis/common/treeUpload.js +4 -6
  31. package/dist/scaAnalysis/dotnet/analysis.js +43 -0
  32. package/dist/scaAnalysis/dotnet/index.js +10 -0
  33. package/dist/scaAnalysis/go/goReadDepFile.js +1 -3
  34. package/dist/scaAnalysis/java/analysis.js +5 -8
  35. package/dist/scaAnalysis/java/index.js +2 -2
  36. package/dist/scaAnalysis/javascript/analysis.js +107 -0
  37. package/dist/scaAnalysis/javascript/index.js +50 -0
  38. package/dist/scaAnalysis/php/analysis.js +70 -0
  39. package/dist/scaAnalysis/php/index.js +17 -0
  40. package/dist/scaAnalysis/python/analysis.js +42 -0
  41. package/dist/scaAnalysis/python/index.js +10 -0
  42. package/dist/scaAnalysis/ruby/analysis.js +218 -0
  43. package/dist/scaAnalysis/ruby/index.js +10 -0
  44. package/dist/scan/autoDetection.js +23 -22
  45. package/dist/scan/fileUtils.js +57 -20
  46. package/dist/scan/formatScanOutput.js +12 -14
  47. package/dist/scan/models/groupedResultsModel.js +1 -1
  48. package/dist/scan/models/scanResultsModel.js +3 -1
  49. package/dist/scan/populateProjectIdAndProjectName.js +2 -1
  50. package/dist/scan/scan.js +1 -0
  51. package/dist/scan/scanConfig.js +8 -3
  52. package/dist/scan/scanController.js +16 -3
  53. package/dist/scan/scanResults.js +5 -1
  54. package/dist/utils/commonApi.js +4 -1
  55. package/dist/utils/filterProjectPath.js +7 -2
  56. package/dist/utils/getConfig.js +1 -6
  57. package/package.json +12 -9
  58. package/src/audit/catalogueApplication/catalogueApplication.js +28 -7
  59. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -39
  60. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +183 -68
  61. package/src/audit/languageAnalysisEngine/report/models/reportLibraryModel.ts +3 -3
  62. package/src/audit/languageAnalysisEngine/report/models/reportListModel.ts +18 -11
  63. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
  64. package/src/audit/languageAnalysisEngine/report/models/reportSeverityModel.ts +6 -1
  65. package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +4 -0
  66. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +86 -32
  67. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +87 -32
  68. package/src/audit/languageAnalysisEngine/sendSnapshot.js +69 -20
  69. package/src/audit/save.js +48 -0
  70. package/src/commands/audit/auditConfig.ts +0 -25
  71. package/src/commands/audit/auditController.ts +18 -20
  72. package/src/commands/audit/help.ts +31 -25
  73. package/src/commands/audit/processAudit.ts +3 -6
  74. package/src/commands/audit/saveFile.ts +6 -2
  75. package/src/commands/scan/processScan.js +0 -1
  76. package/src/commands/scan/sca/scaAnalysis.js +84 -30
  77. package/src/common/HTTPClient.js +81 -34
  78. package/src/common/errorHandling.ts +10 -1
  79. package/src/common/versionChecker.ts +24 -5
  80. package/src/constants/constants.js +9 -3
  81. package/src/constants/locales.js +58 -43
  82. package/src/constants.js +21 -14
  83. package/src/index.ts +70 -58
  84. package/src/lambda/analytics.ts +9 -0
  85. package/src/lambda/arn.ts +2 -1
  86. package/src/lambda/lambda.ts +40 -17
  87. package/src/lambda/types.ts +36 -0
  88. package/src/lambda/utils.ts +2 -7
  89. package/src/sbom/generateSbom.ts +2 -2
  90. package/src/scaAnalysis/common/formatMessage.js +48 -1
  91. package/src/scaAnalysis/common/treeUpload.js +4 -6
  92. package/src/scaAnalysis/dotnet/analysis.js +54 -0
  93. package/src/scaAnalysis/dotnet/index.js +11 -0
  94. package/src/scaAnalysis/go/goAnalysis.js +2 -3
  95. package/src/scaAnalysis/go/goReadDepFile.js +1 -3
  96. package/src/scaAnalysis/java/analysis.js +7 -8
  97. package/src/scaAnalysis/java/index.js +2 -2
  98. package/src/scaAnalysis/javascript/analysis.js +126 -0
  99. package/src/scaAnalysis/javascript/index.js +72 -0
  100. package/src/scaAnalysis/php/analysis.js +78 -0
  101. package/src/scaAnalysis/php/index.js +22 -0
  102. package/src/scaAnalysis/python/analysis.js +49 -0
  103. package/src/scaAnalysis/python/index.js +11 -0
  104. package/src/scaAnalysis/ruby/analysis.js +273 -0
  105. package/src/scaAnalysis/ruby/index.js +11 -0
  106. package/src/scan/autoDetection.js +24 -26
  107. package/src/scan/fileUtils.js +60 -20
  108. package/src/scan/formatScanOutput.ts +14 -15
  109. package/src/scan/models/groupedResultsModel.ts +3 -3
  110. package/src/scan/models/resultContentModel.ts +1 -1
  111. package/src/scan/models/scanResultsModel.ts +5 -2
  112. package/src/scan/populateProjectIdAndProjectName.js +3 -1
  113. package/src/scan/scan.ts +1 -0
  114. package/src/scan/scanConfig.js +7 -5
  115. package/src/scan/scanController.js +18 -4
  116. package/src/scan/scanResults.js +10 -0
  117. package/src/utils/commonApi.js +4 -1
  118. package/src/utils/filterProjectPath.js +6 -2
  119. package/src/utils/getConfig.ts +1 -12
  120. package/dist/audit/AnalysisEngine.js +0 -37
  121. package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
  122. package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
  123. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
  124. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
  125. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
  126. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
  127. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
  128. package/dist/audit/goAnalysisEngine/index.js +0 -17
  129. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
  130. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
  131. package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
  132. package/dist/audit/javaAnalysisEngine/index.js +0 -34
  133. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -153
  134. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
  135. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
  136. package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
  137. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -24
  138. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -24
  139. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
  140. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -23
  141. package/dist/audit/languageAnalysisEngine/constants.js +0 -20
  142. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
  143. package/dist/audit/languageAnalysisEngine/index.js +0 -39
  144. package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -87
  145. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -150
  146. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
  147. package/dist/audit/nodeAnalysisEngine/index.js +0 -31
  148. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
  149. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
  150. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
  151. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
  152. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
  153. package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
  154. package/dist/audit/phpAnalysisEngine/index.js +0 -23
  155. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
  156. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
  157. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
  158. package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
  159. package/dist/audit/pythonAnalysisEngine/index.js +0 -25
  160. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
  161. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
  162. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
  163. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
  164. package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
  165. package/dist/audit/rubyAnalysisEngine/index.js +0 -25
  166. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
  167. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
  168. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
  169. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
  170. package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
  171. package/src/audit/AnalysisEngine.js +0 -103
  172. package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
  173. package/src/audit/dotnetAnalysisEngine/index.js +0 -26
  174. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
  175. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
  176. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
  177. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
  178. package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
  179. package/src/audit/goAnalysisEngine/index.js +0 -18
  180. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
  181. package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
  182. package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
  183. package/src/audit/javaAnalysisEngine/index.js +0 -41
  184. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -222
  185. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
  186. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
  187. package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
  188. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -35
  189. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -41
  190. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
  191. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -32
  192. package/src/audit/languageAnalysisEngine/constants.js +0 -23
  193. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
  194. package/src/audit/languageAnalysisEngine/index.js +0 -45
  195. package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -116
  196. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -249
  197. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
  198. package/src/audit/nodeAnalysisEngine/index.js +0 -35
  199. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
  200. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
  201. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
  202. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
  203. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
  204. package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
  205. package/src/audit/phpAnalysisEngine/index.js +0 -27
  206. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
  207. package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
  208. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
  209. package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
  210. package/src/audit/pythonAnalysisEngine/index.js +0 -55
  211. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
  212. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
  213. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
  214. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
  215. package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
  216. package/src/audit/rubyAnalysisEngine/index.js +0 -30
  217. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
  218. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
  219. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
  220. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
  221. package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
@@ -1,209 +0,0 @@
1
- const i18n = require('i18n')
2
- const crypto = require('crypto')
3
-
4
- module.exports = exports = ({ go }, next) => {
5
- const { modGraphOutput } = go
6
- try {
7
- go.goDependencyTrees = parseGo(modGraphOutput)
8
- } catch (err) {
9
- next(new Error(i18n.__('goParseProjectFile') + `${err.message}`))
10
- return
11
- }
12
- next()
13
- }
14
-
15
- const splitAllLinesIntoArray = modGraphOutput => {
16
- return modGraphOutput.split(/\r\n|\r|\n/)
17
- }
18
-
19
- const parseGo = modGraphOutput => {
20
- let splitLines = splitAllLinesIntoArray(modGraphOutput)
21
- const directDepNames = getDirectDepNames(splitLines)
22
- const uniqueTransitiveDepNames = getAllUniqueTransitiveDepNames(
23
- splitLines,
24
- directDepNames
25
- )
26
-
27
- let rootNodes = createRootNodes(splitLines)
28
-
29
- createTransitiveDeps(uniqueTransitiveDepNames, splitLines, rootNodes)
30
-
31
- //console.log(rootNodes)
32
-
33
- return rootNodes
34
- }
35
-
36
- const getAllDepsOfADepAsEdge = (dep, deps) => {
37
- let edges = {}
38
-
39
- const depRows = deps.filter(line => {
40
- return line.startsWith(dep)
41
- })
42
-
43
- depRows.forEach(dep => {
44
- const edgeName = dep.split(' ')[1]
45
- edges[edgeName] = edgeName
46
- })
47
-
48
- return edges
49
- }
50
-
51
- const getAllDepsOfADepAsName = (dep, deps) => {
52
- let edges = []
53
-
54
- const depRows = deps.filter(line => {
55
- return line.startsWith(dep)
56
- })
57
-
58
- depRows.forEach(dep => {
59
- const edgeName = dep.split(' ')[1]
60
- edges.push(edgeName)
61
- })
62
-
63
- return edges
64
- }
65
-
66
- const createRootNodes = deps => {
67
- let rootDep = {}
68
- const rootDeps = getRootDeps(deps)
69
-
70
- const edges = rootDeps.map(dep => {
71
- return dep.split(' ')[1]
72
- })
73
-
74
- rootDep[rootDeps[0].split(' ')[0]] = {}
75
-
76
- edges.forEach(edge => {
77
- const splitEdge = edge.split('@')
78
- const splitGroupName = splitEdge[0].split('/')
79
- const name = splitGroupName.pop()
80
- const lastSlash = splitEdge[0].lastIndexOf('/')
81
- let group = splitEdge[0].substring(0, lastSlash)
82
- const hash = getHash(splitEdge[0])
83
-
84
- group = checkGroupExists(group, name)
85
-
86
- //get the edges of the root dependency
87
- const edgesOfDep = getAllDepsOfADepAsEdge(edge, deps)
88
-
89
- rootDep[rootDeps[0].split(' ')[0]][edge] = {
90
- artifactID: name,
91
- group: group,
92
- version: splitEdge[1],
93
- scope: '"compile',
94
- type: 'direct',
95
- hash: hash,
96
- edges: edgesOfDep
97
- }
98
- })
99
- return rootDep
100
- }
101
-
102
- const getRootDeps = deps => {
103
- const rootDeps = deps.filter(dep => {
104
- const parentDep = dep.split(' ')[0]
105
- if (parentDep.split('@v').length === 1) {
106
- return dep
107
- }
108
- })
109
- return rootDeps
110
- }
111
-
112
- const getHash = library => {
113
- let shaSum = crypto.createHash('sha1')
114
- shaSum.update(library)
115
- return shaSum.digest('hex')
116
- }
117
-
118
- const getDirectDepNames = deps => {
119
- const directDepNames = []
120
-
121
- deps.forEach(dep => {
122
- const parentDep = dep.split(' ')[0]
123
- if (parentDep.split('@v').length === 1) {
124
- dep.split(' ')[1] !== undefined
125
- ? directDepNames.push(dep.split(' ')[1])
126
- : null
127
- }
128
- })
129
- return directDepNames
130
- }
131
-
132
- const getAllUniqueTransitiveDepNames = (deps, directDepNames) => {
133
- let uniqueDeps = []
134
-
135
- deps.forEach(dep => {
136
- const parentDep = dep.split(' ')[0]
137
- if (parentDep.split('@v').length !== 1) {
138
- if (!directDepNames.includes(parentDep)) {
139
- if (!uniqueDeps.includes(parentDep)) {
140
- parentDep.length > 1 ? uniqueDeps.push(parentDep) : null
141
- }
142
- }
143
- }
144
- })
145
- return uniqueDeps
146
- }
147
-
148
- const checkGroupExists = (group, name) => {
149
- if (group === null || group === '') {
150
- return name
151
- }
152
- return group
153
- }
154
-
155
- const createTransitiveDeps = (transitiveDeps, splitLines, rootNodes) => {
156
- transitiveDeps.forEach(dep => {
157
- //create transitive dep
158
- const splitEdge = dep.split('@')
159
- const splitGroupName = splitEdge[0].split('/')
160
- const name = splitGroupName.pop()
161
- const lastSlash = splitEdge[0].lastIndexOf('/')
162
- let group = splitEdge[0].substring(0, lastSlash)
163
- const hash = getHash(splitEdge[0])
164
-
165
- group = checkGroupExists(group, name)
166
-
167
- const transitiveDep = {
168
- artifactID: name,
169
- group: group,
170
- version: splitEdge[1],
171
- scope: 'compile',
172
- type: 'transitive',
173
- hash: hash,
174
- edges: {}
175
- }
176
-
177
- //add edges to transitiveDep
178
- const edges = getAllDepsOfADepAsEdge(dep, splitLines)
179
- transitiveDep.edges = edges
180
-
181
- //add all edges as a transitive dependency to rootNodes
182
- const edgesAsName = getAllDepsOfADepAsName(dep, splitLines)
183
-
184
- edgesAsName.forEach(dep => {
185
- const splitEdge = dep.split('@')
186
- const splitGroupName = splitEdge[0].split('/')
187
- const name = splitGroupName.pop()
188
- const lastSlash = splitEdge[0].lastIndexOf('/')
189
- let group = splitEdge[0].substring(0, lastSlash)
190
- const hash = getHash(splitEdge[0])
191
-
192
- group = checkGroupExists(group, name)
193
-
194
- const transitiveDep = {
195
- artifactID: name,
196
- group: group,
197
- version: splitEdge[1],
198
- scope: 'compile',
199
- type: 'transitive',
200
- hash: hash,
201
- edges: {}
202
- }
203
- rootNodes[Object.keys(rootNodes)[0]][dep] = transitiveDep
204
- })
205
-
206
- //add transitive dependency to rootNodes
207
- rootNodes[Object.keys(rootNodes)[0]][dep] = transitiveDep
208
- })
209
- }
@@ -1,31 +0,0 @@
1
- const child_process = require('child_process')
2
- const i18n = require('i18n')
3
-
4
- module.exports = exports = async (
5
- { language: { projectFilePath }, go },
6
- next
7
- ) => {
8
- let cmdStdout
9
- let cwd
10
- try {
11
- cwd = projectFilePath.replace('go.mod', '')
12
- // A sample of this output can be found
13
- // in the go test folder data/goModGraphResults.text
14
- cmdStdout = child_process.execSync('go mod graph', { cwd })
15
-
16
- go.modGraphOutput = cmdStdout.toString()
17
-
18
- next()
19
- } catch (err) {
20
- if (err.message === 'spawnSync /bin/sh ENOENT') {
21
- err.message =
22
- '\n\n*************** No transitive dependencies ***************\n\nWe are unable to build a dependency tree view from your repository as there were no transitive dependencies found.'
23
- }
24
- next(
25
- new Error(
26
- i18n.__('goReadProjectFile', cwd, `${err.message ? err.message : ''}`)
27
- )
28
- )
29
- return
30
- }
31
- }
@@ -1,7 +0,0 @@
1
- module.exports = exports = ({ go }, next) => {
2
- // Remove anything sensitive or unnecessary from being sent to the backend as
3
- // a result of our Go project analysis
4
- delete go.modGraphOutput
5
-
6
- next()
7
- }
@@ -1,41 +0,0 @@
1
- const AnalysisEngine = require('../AnalysisEngine')
2
-
3
- const readProjectFileContents = require('./readProjectFileContents')
4
- const parseMavenProjectFileContents = require('./parseMavenProjectFileContents')
5
- const parseProjectFileContents = require('./parseProjectFileContents')
6
- const sanitizer = require('./sanitizer')
7
- const i18n = require('i18n')
8
-
9
- module.exports = exports = (language, config, callback) => {
10
- const ae = new AnalysisEngine({ language, config, java: {} })
11
-
12
- // Remove ".kts" from filename to look the same as a Gradle projectFileName so we can support Kotlin
13
- language.projectFilePath = language.projectFilePath.replace(
14
- 'build.gradle.kts',
15
- 'build.gradle'
16
- )
17
-
18
- if (config['beta_unified_java_parser']) {
19
- console.log('Using new parser...')
20
- ae.use([readProjectFileContents, parseProjectFileContents, sanitizer])
21
- } else if (
22
- language.projectFilePath.endsWith('pom.xml') &&
23
- !config['beta_unified_java_parser']
24
- ) {
25
- ae.use([readProjectFileContents, parseMavenProjectFileContents, sanitizer])
26
- } else {
27
- ae.use([
28
- readProjectFileContents,
29
- parseMavenProjectFileContents,
30
- parseProjectFileContents,
31
- sanitizer
32
- ])
33
- }
34
- ae.analyze((err, analysis) => {
35
- if (err) {
36
- console.log(i18n.__('javaAnalysisError'), err.message)
37
- return
38
- }
39
- callback(null, analysis, config)
40
- }, config)
41
- }
@@ -1,222 +0,0 @@
1
- const i18n = require('i18n')
2
-
3
- module.exports = exports = ({ language: { projectFilePath }, java }, next) => {
4
- const { mvnDependancyTreeOutput } = java
5
-
6
- if (projectFilePath.endsWith('pom.xml')) {
7
- try {
8
- java.mavenDependencyTrees = parseMvn(mvnDependancyTreeOutput)
9
- next()
10
- } catch (err) {
11
- next(new Error(i18n.__('javaParseProjectFile') + `${err.message}`))
12
- return
13
- }
14
- } else {
15
- // Go to gradle project
16
- next()
17
- }
18
- }
19
-
20
- const hasVersion = key => {
21
- var regex = RegExp('[0-9].[0-9]')
22
- return regex.test(key)
23
- }
24
-
25
- const formatKeyName = value => {
26
- let tempArr = value.split(':')
27
- let versionIndex = undefined
28
- for (let i = 0; i < tempArr.length; i++) {
29
- if (hasVersion(tempArr[i])) {
30
- versionIndex = i
31
- }
32
- }
33
-
34
- return tempArr[0] + '/' + tempArr[1] + '@' + tempArr[versionIndex]
35
- }
36
-
37
- const shaveConsoleOutputUntilItFindsFirsDigraphMention = mvnDependancyTreeOutput => {
38
- //shaves of the console output until it reaches the first digraph
39
- return mvnDependancyTreeOutput.substring(
40
- mvnDependancyTreeOutput.indexOf('digraph')
41
- )
42
- }
43
-
44
- const getDigraphObjInfo = editedOutput => {
45
- //turns the output into an array of digraph information
46
- // which looks like
47
- // ' "com.contrastsecurity:teamserver-model:jar:local" {\n
48
- // \n [INFO] "com.contrastsecurity:teamserver-model:jar:local" -> "junit:junit:jar:4.12:test" ;\n
49
- // \n [INFO] "junit:junit:jar:4.12:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ;\n
50
- // [INFO] }' ]
51
- let digraphObj = editedOutput.split('digraph')
52
-
53
- return digraphObj.filter(v => v != '')
54
- }
55
-
56
- const createDigraphObjKey = element => {
57
- // parse the digraph to turn into an object key
58
- let formatObjKey = element.substring(0, element.indexOf('{'))
59
- formatObjKey = formatObjKey.replace(/"/g, '')
60
- formatObjKey = formatObjKey.replace('{', '')
61
- formatObjKey = formatObjKey.trim()
62
-
63
- return formatObjKey
64
- }
65
-
66
- const turnDigraphDependanciesIntoArrOfInnerDep = digraphObj => {
67
- // takes:
68
- // "com.contrastsecurity:teamserver-model:jar:local" {
69
- // [INFO] "com.contrastsecurity:teamserver-model:jar:local" -> "org.springframework:spring-core:jar:5.1.9.RELEASE:compile" ;
70
- // [INFO] "com.contrastsecurity:teamserver-model:jar:local" -> "junit:junit:jar:4.12:test" ;
71
- // [INFO] "org.springframework:spring-core:jar:5.1.9.RELEASE:compile" -> "org.springframework:spring-jcl:jar:5.1.9.RELEASE:compile" ;
72
- // [INFO] "junit:junit:jar:4.12:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test" ;
73
- // [INFO] }
74
-
75
- // and turns it into
76
- // [ '"com.contrastsecurity:teamserver-model:jar:local" -> "org.springframework:spring-core:jar:5.1.9.RELEASE:compile"',
77
- // '"com.contrastsecurity:teamserver-model:jar:local" -> "junit:junit:jar:4.12:test"',
78
- // '"org.springframework:spring-core:jar:5.1.9.RELEASE:compile" -> "org.springframework:spring-jcl:jar:5.1.9.RELEASE:compile"',
79
- // '"junit:junit:jar:4.12:test" -> "org.hamcrest:hamcrest-core:jar:1.3:test"',
80
- // '' ]
81
-
82
- let depRow = digraphObj.substring(
83
- digraphObj.indexOf('{'),
84
- digraphObj.indexOf('}') + 1
85
- )
86
- depRow = depRow.replace(/\[INFO\]/g, '')
87
- depRow = depRow.replace(/\n/g, '')
88
- depRow = depRow.replace(/\{/g, '')
89
- depRow = depRow.replace(/\}/g, '')
90
- depRow = depRow.replace(/\"/g, '') // eslint-disable-line
91
-
92
- return depRow.split(';').map(s => s.trim())
93
- }
94
-
95
- const createOuterDependanciesAndType = (digraphObjKey, arrOfInnerDep) => {
96
- let leftKey
97
- let rightKey
98
- let newDepNode
99
- const list = []
100
-
101
- arrOfInnerDep.forEach(element => {
102
- leftKey = element.substring(0, element.indexOf(' -'))
103
- rightKey = element.substring(element.indexOf('>') + 2)
104
-
105
- // if the digraph and the leftKey are the same and the left has a version
106
- // then “edgeType” is direct
107
- if (leftKey === digraphObjKey) {
108
- if (hasVersion(rightKey)) {
109
- let rightKeyArr = rightKey.split(':')
110
- newDepNode = {
111
- [rightKey]: {
112
- group: rightKeyArr[0],
113
- artifactID: rightKeyArr[1],
114
- packaging: rightKeyArr[2],
115
- version: rightKeyArr[3],
116
- scope: rightKeyArr[4],
117
- type: 'direct',
118
- parent: leftKey,
119
- edges: {}
120
- }
121
- }
122
- list.push(newDepNode)
123
- }
124
- }
125
- // if right and left both have versions and left doesn't match digraph name
126
- // then “type” is transitive
127
- if (
128
- hasVersion(leftKey) &&
129
- hasVersion(rightKey) &&
130
- !(leftKey === digraphObjKey)
131
- ) {
132
- let rightKeyArr = rightKey.split(':')
133
- newDepNode = {
134
- [rightKey]: {
135
- group: rightKeyArr[0],
136
- artifactID: rightKeyArr[1],
137
- packaging: rightKeyArr[2],
138
- version: rightKeyArr[3],
139
- scope: rightKeyArr[4],
140
- type: 'transitive',
141
- parent: leftKey,
142
- edges: {}
143
- }
144
- }
145
- list.push(newDepNode)
146
- }
147
- })
148
-
149
- return list
150
- }
151
-
152
- const createEdges = (digraphObjKey, listOuterDep) => {
153
- listOuterDep.forEach(element => {
154
- const key = Object.keys(element).toString()
155
-
156
- const childParentRef = element[key].parent
157
-
158
- if (childParentRef !== digraphObjKey) {
159
- listOuterDep.forEach(i => {
160
- let parentKey = Object.keys(i).toString()
161
- if (childParentRef === parentKey) {
162
- i[parentKey].edges[formatKeyName(key)] = formatKeyName(key)
163
- }
164
- })
165
- }
166
- })
167
- return listOuterDep
168
- }
169
-
170
- const extractFromArrAndFinalParse = listWithEdges => {
171
- let finalObj = {}
172
- listWithEdges.forEach(element => {
173
- const key = Object.keys(element).toString()
174
-
175
- const parsedKey = formatKeyName(key)
176
-
177
- delete element[key].parent
178
-
179
- finalObj[parsedKey] = element[key]
180
- })
181
- return finalObj
182
- }
183
-
184
- const dependancyValueCreationOrganiser = (digraphObjKey, digraph) => {
185
- const arrOfInnerDep = turnDigraphDependanciesIntoArrOfInnerDep(digraph)
186
- const listOuterDep = createOuterDependanciesAndType(
187
- digraphObjKey,
188
- arrOfInnerDep
189
- )
190
- const listWithEdges = createEdges(digraphObjKey, listOuterDep)
191
- const finishDepObj = extractFromArrAndFinalParse(listWithEdges)
192
-
193
- return finishDepObj
194
- }
195
-
196
- const parseMvn = mvnDependancyTreeOutput => {
197
- let parsedDepObj = {}
198
- let editedOutput = shaveConsoleOutputUntilItFindsFirsDigraphMention(
199
- mvnDependancyTreeOutput
200
- )
201
- let digraphObjArray = getDigraphObjInfo(editedOutput)
202
-
203
- digraphObjArray.forEach(digraph => {
204
- const digraphObjKey = createDigraphObjKey(digraph)
205
- parsedDepObj[digraphObjKey] = dependancyValueCreationOrganiser(
206
- digraphObjKey,
207
- digraph
208
- )
209
- })
210
- return parsedDepObj
211
- }
212
-
213
- // testing purposes
214
- exports.shaveConsoleOutputUntilItFindsFirsDigraphMention = shaveConsoleOutputUntilItFindsFirsDigraphMention
215
- exports.getDigraphObjInfo = getDigraphObjInfo
216
- exports.createDigraphObjKey = createDigraphObjKey
217
- exports.turnDigraphDependanciesIntoArrOfInnerDep = turnDigraphDependanciesIntoArrOfInnerDep
218
- exports.hasVersion = hasVersion
219
- exports.formatKeyName = formatKeyName
220
- exports.createOuterDependanciesAndType = createOuterDependanciesAndType
221
- exports.extractFromArrAndFinalParse = extractFromArrAndFinalParse
222
- exports.createEdges = createEdges