@contrast/contrast 1.0.8 → 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 (173) hide show
  1. package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +3 -12
  2. package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +88 -53
  3. package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +4 -3
  4. package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +58 -11
  5. package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +38 -5
  6. package/dist/audit/languageAnalysisEngine/sendSnapshot.js +6 -30
  7. package/dist/audit/save.js +21 -13
  8. package/dist/commands/audit/auditConfig.js +0 -16
  9. package/dist/commands/audit/auditController.js +1 -10
  10. package/dist/commands/audit/help.js +7 -24
  11. package/dist/commands/audit/processAudit.js +1 -7
  12. package/dist/commands/audit/saveFile.js +2 -2
  13. package/dist/commands/scan/sca/scaAnalysis.js +22 -9
  14. package/dist/common/HTTPClient.js +8 -8
  15. package/dist/constants/constants.js +7 -2
  16. package/dist/constants/locales.js +24 -30
  17. package/dist/constants.js +11 -9
  18. package/dist/index.js +54 -45
  19. package/dist/lambda/lambda.js +5 -2
  20. package/dist/sbom/generateSbom.js +2 -2
  21. package/dist/scaAnalysis/common/formatMessage.js +7 -1
  22. package/dist/scaAnalysis/common/treeUpload.js +4 -5
  23. package/dist/scaAnalysis/dotnet/analysis.js +43 -0
  24. package/dist/scaAnalysis/dotnet/index.js +10 -0
  25. package/dist/scaAnalysis/javascript/analysis.js +4 -7
  26. package/dist/scaAnalysis/javascript/index.js +14 -5
  27. package/dist/scaAnalysis/php/analysis.js +14 -33
  28. package/dist/scaAnalysis/php/index.js +11 -4
  29. package/dist/scaAnalysis/ruby/analysis.js +2 -10
  30. package/dist/scan/autoDetection.js +18 -21
  31. package/dist/scan/fileUtils.js +31 -12
  32. package/dist/scan/formatScanOutput.js +3 -3
  33. package/dist/scan/scanConfig.js +2 -2
  34. package/dist/utils/getConfig.js +1 -6
  35. package/package.json +2 -3
  36. package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +3 -32
  37. package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +128 -68
  38. package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
  39. package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +41 -19
  40. package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +43 -4
  41. package/src/audit/languageAnalysisEngine/sendSnapshot.js +6 -32
  42. package/src/audit/save.js +32 -16
  43. package/src/commands/audit/auditConfig.ts +0 -25
  44. package/src/commands/audit/auditController.ts +0 -11
  45. package/src/commands/audit/help.ts +7 -24
  46. package/src/commands/audit/processAudit.ts +1 -7
  47. package/src/commands/audit/saveFile.ts +2 -2
  48. package/src/commands/scan/processScan.js +0 -1
  49. package/src/commands/scan/sca/scaAnalysis.js +28 -13
  50. package/src/common/HTTPClient.js +9 -9
  51. package/src/constants/constants.js +9 -3
  52. package/src/constants/locales.js +47 -35
  53. package/src/constants.js +12 -10
  54. package/src/index.ts +76 -66
  55. package/src/lambda/lambda.ts +5 -2
  56. package/src/lambda/types.ts +1 -0
  57. package/src/sbom/generateSbom.ts +2 -2
  58. package/src/scaAnalysis/common/formatMessage.js +8 -1
  59. package/src/scaAnalysis/common/treeUpload.js +4 -5
  60. package/src/scaAnalysis/dotnet/analysis.js +54 -0
  61. package/src/scaAnalysis/dotnet/index.js +11 -0
  62. package/src/scaAnalysis/javascript/analysis.js +6 -7
  63. package/src/scaAnalysis/javascript/index.js +23 -7
  64. package/src/scaAnalysis/php/analysis.js +15 -35
  65. package/src/scaAnalysis/php/index.js +15 -4
  66. package/src/scaAnalysis/ruby/analysis.js +2 -11
  67. package/src/scan/autoDetection.js +18 -24
  68. package/src/scan/fileUtils.js +33 -12
  69. package/src/scan/formatScanOutput.ts +3 -3
  70. package/src/scan/scanConfig.js +2 -4
  71. package/src/utils/getConfig.ts +1 -12
  72. package/dist/audit/AnalysisEngine.js +0 -37
  73. package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
  74. package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
  75. package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
  76. package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
  77. package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
  78. package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
  79. package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
  80. package/dist/audit/goAnalysisEngine/index.js +0 -17
  81. package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
  82. package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
  83. package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
  84. package/dist/audit/javaAnalysisEngine/index.js +0 -34
  85. package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -155
  86. package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
  87. package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
  88. package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
  89. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -25
  90. package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -25
  91. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
  92. package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -24
  93. package/dist/audit/languageAnalysisEngine/constants.js +0 -20
  94. package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
  95. package/dist/audit/languageAnalysisEngine/index.js +0 -39
  96. package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -66
  97. package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -166
  98. package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
  99. package/dist/audit/nodeAnalysisEngine/index.js +0 -31
  100. package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
  101. package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
  102. package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
  103. package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
  104. package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
  105. package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
  106. package/dist/audit/phpAnalysisEngine/index.js +0 -23
  107. package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
  108. package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
  109. package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
  110. package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
  111. package/dist/audit/pythonAnalysisEngine/index.js +0 -25
  112. package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
  113. package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
  114. package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
  115. package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
  116. package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
  117. package/dist/audit/rubyAnalysisEngine/index.js +0 -25
  118. package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
  119. package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
  120. package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
  121. package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
  122. package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
  123. package/src/audit/AnalysisEngine.js +0 -103
  124. package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
  125. package/src/audit/dotnetAnalysisEngine/index.js +0 -26
  126. package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
  127. package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
  128. package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
  129. package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
  130. package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
  131. package/src/audit/goAnalysisEngine/index.js +0 -18
  132. package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
  133. package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
  134. package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
  135. package/src/audit/javaAnalysisEngine/index.js +0 -41
  136. package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -225
  137. package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
  138. package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
  139. package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
  140. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -36
  141. package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -42
  142. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
  143. package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -33
  144. package/src/audit/languageAnalysisEngine/constants.js +0 -23
  145. package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
  146. package/src/audit/languageAnalysisEngine/index.js +0 -45
  147. package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -96
  148. package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -251
  149. package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
  150. package/src/audit/nodeAnalysisEngine/index.js +0 -35
  151. package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
  152. package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
  153. package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
  154. package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
  155. package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
  156. package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
  157. package/src/audit/phpAnalysisEngine/index.js +0 -27
  158. package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
  159. package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
  160. package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
  161. package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
  162. package/src/audit/pythonAnalysisEngine/index.js +0 -55
  163. package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
  164. package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
  165. package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
  166. package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
  167. package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
  168. package/src/audit/rubyAnalysisEngine/index.js +0 -30
  169. package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
  170. package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
  171. package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
  172. package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
  173. package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
@@ -1,66 +0,0 @@
1
- "use strict";
2
- const { supportedLanguages: { DOTNET, NODE, JAVA, RUBY, PYTHON, GO, PHP } } = require('../languageAnalysisEngine/constants');
3
- const i18n = require('i18n');
4
- const dotnetAE = require('../dotnetAnalysisEngine');
5
- const nodeAE = require('../nodeAnalysisEngine');
6
- const javaAE = require('../javaAnalysisEngine');
7
- const rubyAE = require('../rubyAnalysisEngine');
8
- const pythonAE = require('../pythonAnalysisEngine');
9
- const phpAE = require('../phpAnalysisEngine');
10
- const goAE = require('../goAnalysisEngine');
11
- const { vulnerabilityReport } = require('./report/reportingFeature');
12
- const { newSendSnapShot } = require('../languageAnalysisEngine/sendSnapshot');
13
- const { returnOra, startSpinner, succeedSpinner } = require('../../utils/oraWrapper');
14
- const { pollForSnapshotCompletition } = require('./sendSnapshot');
15
- const auditSave = require('../save');
16
- module.exports = exports = (err, analysis) => {
17
- const { identifiedLanguageInfo } = analysis.languageAnalysis;
18
- const catalogueAppId = analysis.languageAnalysis.appId;
19
- if (err) {
20
- console.error(err);
21
- return;
22
- }
23
- const langCallback = async (err, analysis) => {
24
- const config = analysis.config;
25
- if (err) {
26
- console.log();
27
- console.log('***********' +
28
- i18n.__('languageAnalysisFactoryFailureHeader') +
29
- '****************');
30
- console.log(identifiedLanguageInfo.language);
31
- console.log();
32
- console.error(`${identifiedLanguageInfo.language}` +
33
- i18n.__('languageAnalysisFailure') +
34
- err);
35
- return process.exit(5);
36
- }
37
- const reportSpinner = returnOra(i18n.__('auditSCAAnalysisBegins'));
38
- startSpinner(reportSpinner);
39
- const snapshotResponse = await newSendSnapShot(analysis, catalogueAppId);
40
- await pollForSnapshotCompletition(analysis.config, snapshotResponse.id, reportSpinner);
41
- succeedSpinner(reportSpinner, i18n.__('auditSCAAnalysisComplete'));
42
- await vulnerabilityReport(analysis, catalogueAppId, snapshotResponse.id);
43
- await auditSave.auditSave(config);
44
- };
45
- if (identifiedLanguageInfo.language === DOTNET) {
46
- dotnetAE(identifiedLanguageInfo, analysis.config, langCallback);
47
- }
48
- if (identifiedLanguageInfo.language === NODE) {
49
- nodeAE(identifiedLanguageInfo, analysis.config, langCallback);
50
- }
51
- if (identifiedLanguageInfo.language === JAVA) {
52
- javaAE(identifiedLanguageInfo, analysis.config, langCallback);
53
- }
54
- if (identifiedLanguageInfo.language === RUBY) {
55
- rubyAE(identifiedLanguageInfo, analysis.config, langCallback);
56
- }
57
- if (identifiedLanguageInfo.language === PYTHON) {
58
- pythonAE(identifiedLanguageInfo, analysis.config, langCallback);
59
- }
60
- if (identifiedLanguageInfo.language === PHP) {
61
- phpAE(identifiedLanguageInfo, analysis.config, langCallback);
62
- }
63
- if (identifiedLanguageInfo.language === GO) {
64
- goAE(identifiedLanguageInfo, analysis.config, langCallback);
65
- }
66
- };
@@ -1,166 +0,0 @@
1
- "use strict";
2
- const { supportedLanguages: { NODE, DOTNET, JAVA, RUBY, PYTHON, GO, PHP, JAVASCRIPT } } = require('./constants');
3
- const i18n = require('i18n');
4
- const DOT_NET_PROJECT_FILE_REGEX = /.+\.csproj$/;
5
- const DOT_NET_LOCK_FILENAME = 'packages.lock.json';
6
- const isDotNetProjectFilename = filename => filename.search(DOT_NET_PROJECT_FILE_REGEX) !== -1;
7
- const isDotNetLockFilename = filename => filename === DOT_NET_LOCK_FILENAME;
8
- function isJavaMavenProjectFilename(filename) {
9
- return filename === 'pom.xml';
10
- }
11
- function isJavaGradleProjectFilename(filename) {
12
- return filename === 'build.gradle' || filename === 'build.gradle.kts';
13
- }
14
- const isRubyProjectFilename = filename => filename === 'Gemfile';
15
- const isNodeProjectFilename = filename => filename === 'package.json';
16
- const isPythonProjectFilename = filename => filename === 'requirements.txt' || filename === 'Pipfile';
17
- const isPhpProjectFilename = filename => filename === 'composer.json';
18
- const isPhpLockFilename = filename => filename === 'composer.lock';
19
- function isNodeLockFilename(filename) {
20
- return filename === 'package-lock.json' || filename === 'yarn.lock';
21
- }
22
- const isRubyLockFilename = filename => filename === 'Gemfile.lock';
23
- const isPipfileLockLockFilename = filename => filename === 'Pipfile.lock';
24
- const isGoProjectFilename = filename => filename === 'go.mod';
25
- const deduceLanguageScaAnalysis = filenames => {
26
- const deducedLanguages = [];
27
- let language = '';
28
- filenames.forEach(filename => {
29
- if (isJavaMavenProjectFilename(filename)) {
30
- deducedLanguages.push(filename);
31
- language = JAVA;
32
- }
33
- if (isJavaGradleProjectFilename(filename)) {
34
- deducedLanguages.push(filename);
35
- language = JAVA;
36
- }
37
- if (isNodeProjectFilename(filename)) {
38
- deducedLanguages.push(filename);
39
- language = JAVASCRIPT;
40
- }
41
- if (isRubyProjectFilename(filename)) {
42
- deducedLanguages.push(filename);
43
- language = RUBY;
44
- }
45
- if (isPythonProjectFilename(filename)) {
46
- deducedLanguages.push(filename);
47
- language = PYTHON;
48
- }
49
- if (isPhpProjectFilename(filename)) {
50
- deducedLanguages.push({ language: PHP, projectFilename: filename });
51
- language = PHP;
52
- }
53
- if (isNodeLockFilename(filename)) {
54
- deducedLanguages.push(filename);
55
- language = JAVASCRIPT;
56
- }
57
- if (isPhpLockFilename(filename)) {
58
- deducedLanguages.push({ language: PHP, lockFilename: filename });
59
- }
60
- if (isGoProjectFilename(filename)) {
61
- deducedLanguages.push({ language: GO, projectFilename: filename });
62
- language = GO;
63
- }
64
- });
65
- let identifiedLanguages = { [language]: deducedLanguages };
66
- return identifiedLanguages;
67
- };
68
- const deduceLanguage = filename => {
69
- const deducedLanguages = [];
70
- if (isJavaMavenProjectFilename(filename)) {
71
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
72
- }
73
- if (isJavaGradleProjectFilename(filename)) {
74
- deducedLanguages.push({ language: JAVA, projectFilename: filename });
75
- }
76
- if (isNodeProjectFilename(filename)) {
77
- deducedLanguages.push({ language: NODE, projectFilename: filename });
78
- }
79
- if (isDotNetProjectFilename(filename)) {
80
- deducedLanguages.push({ language: DOTNET, projectFilename: filename });
81
- }
82
- if (isRubyProjectFilename(filename)) {
83
- deducedLanguages.push({ language: RUBY, projectFilename: filename });
84
- }
85
- if (isPythonProjectFilename(filename)) {
86
- deducedLanguages.push({ language: PYTHON, projectFilename: filename });
87
- }
88
- if (isPhpProjectFilename(filename)) {
89
- deducedLanguages.push({ language: PHP, projectFilename: filename });
90
- }
91
- if (isDotNetLockFilename(filename)) {
92
- deducedLanguages.push({ language: DOTNET, lockFilename: filename });
93
- }
94
- if (isNodeLockFilename(filename)) {
95
- deducedLanguages.push({ language: NODE, lockFilename: filename });
96
- }
97
- if (isRubyLockFilename(filename)) {
98
- deducedLanguages.push({ language: RUBY, lockFilename: filename });
99
- }
100
- if (isPipfileLockLockFilename(filename)) {
101
- deducedLanguages.push({ language: PYTHON, lockFilename: filename });
102
- }
103
- if (isPhpLockFilename(filename)) {
104
- deducedLanguages.push({ language: PHP, lockFilename: filename });
105
- }
106
- if (isGoProjectFilename(filename)) {
107
- deducedLanguages.push({ language: GO, projectFilename: filename });
108
- }
109
- return deducedLanguages;
110
- };
111
- const reduceIdentifiedLanguages = identifiedLanguages => identifiedLanguages.reduce((accumulator, identifiedLanguageInfo) => {
112
- const { language, projectFilename, lockFilename } = identifiedLanguageInfo;
113
- if (!(language in accumulator)) {
114
- accumulator[language] = { projectFilenames: [], lockFilenames: [] };
115
- }
116
- if (projectFilename) {
117
- accumulator[language].projectFilenames.push(projectFilename);
118
- }
119
- else {
120
- accumulator[language].lockFilenames.push(lockFilename);
121
- }
122
- return accumulator;
123
- }, {});
124
- module.exports = exports = (analysis, next) => {
125
- const { file, languageAnalysis, config } = analysis;
126
- let identifiedLanguages = languageAnalysis.projectRootFilenames.reduce((accumulator, filename) => {
127
- const deducedLanguages = deduceLanguage(filename);
128
- return [...accumulator, ...deducedLanguages];
129
- }, []);
130
- if (Object.keys(identifiedLanguages).length === 0) {
131
- next(new Error(i18n.__('languageAnalysisNoLanguage', file)));
132
- return;
133
- }
134
- let language = config.language;
135
- if (language === undefined) {
136
- languageAnalysis.identifiedLanguages =
137
- reduceIdentifiedLanguages(identifiedLanguages);
138
- }
139
- else {
140
- let refinedIdentifiedLanguages = [];
141
- for (let x in identifiedLanguages) {
142
- if (identifiedLanguages[x].language === language.toUpperCase() ||
143
- (identifiedLanguages[x].language === NODE &&
144
- language.toUpperCase() === JAVASCRIPT)) {
145
- refinedIdentifiedLanguages.push(identifiedLanguages[x]);
146
- }
147
- }
148
- if (refinedIdentifiedLanguages.length === 0) {
149
- console.log(`Could not detect language as specified: ${config.language}`);
150
- process.exit(1);
151
- }
152
- languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(refinedIdentifiedLanguages);
153
- }
154
- next();
155
- };
156
- exports.isJavaMavenProjectFilename = isJavaMavenProjectFilename;
157
- exports.isJavaGradleProjectFilename = isJavaGradleProjectFilename;
158
- exports.isNodeProjectFilename = isNodeProjectFilename;
159
- exports.isDotNetProjectFilename = isDotNetProjectFilename;
160
- exports.isDotNetLockFilename = isDotNetLockFilename;
161
- exports.isGoProjectFilename = isGoProjectFilename;
162
- exports.isPhpProjectFilename = isPhpProjectFilename;
163
- exports.isPhpLockFilename = isPhpLockFilename;
164
- exports.deduceLanguage = deduceLanguage;
165
- exports.reduceIdentifiedLanguages = reduceIdentifiedLanguages;
166
- exports.deduceLanguageScaAnalysis = deduceLanguageScaAnalysis;
@@ -1,40 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = (analysis, next) => {
4
- const { language: { lockFilePath }, node } = analysis;
5
- try {
6
- if (node.npmLockFile && node.npmLockFile.lockfileVersion > 1) {
7
- const listOfTopDep = Object.keys(node.npmLockFile.dependencies);
8
- Object.entries(node.npmLockFile.dependencies).forEach(([key, value]) => {
9
- if (value.requires) {
10
- const listOfRequiresDep = Object.keys(value.requires);
11
- listOfRequiresDep.forEach(dep => {
12
- if (!listOfTopDep.includes(dep)) {
13
- addDepToLockFile(value['requires'], dep);
14
- }
15
- });
16
- }
17
- if (value.dependencies) {
18
- Object.entries(value.dependencies).forEach(([childKey, childValue]) => {
19
- if (childValue.requires) {
20
- const listOfRequiresDep = Object.keys(childValue.requires);
21
- listOfRequiresDep.forEach(dep => {
22
- if (!listOfTopDep.includes(dep)) {
23
- addDepToLockFile(childValue['requires'], dep);
24
- }
25
- });
26
- }
27
- });
28
- }
29
- });
30
- }
31
- }
32
- catch (err) {
33
- next(next(new Error(i18n.__('NodeParseNPM', lockFilePath) + `${err.message}`)));
34
- return;
35
- }
36
- function addDepToLockFile(depObj, key) {
37
- node.npmLockFile.dependencies[key] = { version: depObj[key] };
38
- }
39
- next();
40
- };
@@ -1,31 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('../AnalysisEngine');
3
- const readProjectFileContents = require('./readProjectFileContents');
4
- const readNPMLockFileContents = require('./readNPMLockFileContents');
5
- const parseNPMLockFileContents = require('./parseNPMLockFileContents');
6
- const readYarnLockFileContents = require('./readYarnLockFileContents');
7
- const parseYarnLockFileContents = require('./parseYarnLockFileContents');
8
- const parseYarn2LockFileContents = require('./parseYarn2LockFileContents');
9
- const handleNPMLockFileV2 = require('./handleNPMLockFileV2');
10
- const sanitizer = require('./sanitizer');
11
- const i18n = require('i18n');
12
- module.exports = exports = (language, config, callback) => {
13
- const ae = new AnalysisEngine({ language, config, node: {} });
14
- ae.use([
15
- readProjectFileContents,
16
- readNPMLockFileContents,
17
- parseNPMLockFileContents,
18
- readYarnLockFileContents,
19
- parseYarnLockFileContents,
20
- parseYarn2LockFileContents,
21
- handleNPMLockFileV2,
22
- sanitizer
23
- ]);
24
- ae.analyze((err, analysis) => {
25
- if (err) {
26
- callback(new Error(i18n.__('NodeAnalysisFailure') + `${err.message}`));
27
- return;
28
- }
29
- callback(null, analysis);
30
- });
31
- };
@@ -1,18 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
4
- if (node.rawLockFileContents === undefined) {
5
- next();
6
- }
7
- else {
8
- try {
9
- node.npmLockFile = JSON.parse(node.rawLockFileContents);
10
- }
11
- catch (err) {
12
- next(new Error(i18n.__('NodeParseNPM', lockFilePath ? lockFilePath : 'undefined') +
13
- `${err.message}`));
14
- return;
15
- }
16
- next();
17
- }
18
- };
@@ -1,18 +0,0 @@
1
- "use strict";
2
- const yarnParser = require('@yarnpkg/lockfile');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilename }, node }, next) => {
5
- if (node.rawYarnLockFileContents === undefined || node.yarnVersion === 2) {
6
- next();
7
- }
8
- else {
9
- try {
10
- node.yarnLockFile = yarnParser.parse(node.rawYarnLockFileContents);
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('NodeParseYarn', lockFilename.lockFilePath ? lockFilename.lockFilePath : 'undefined') + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- }
18
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
5
- if (!lockFilePath || !lockFilePath.includes('package-lock.json')) {
6
- next();
7
- return;
8
- }
9
- try {
10
- node.rawLockFileContents = fs.readFileSync(lockFilePath);
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('NodeReadNpmError', lockFilePath) + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- };
@@ -1,14 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = (analysis, next) => {
5
- const { language: { projectFilePath }, node } = analysis;
6
- try {
7
- node.packageJSON = JSON.parse(fs.readFileSync(projectFilePath, 'utf8'));
8
- }
9
- catch (err) {
10
- next(new Error(i18n.__('nodeReadProjectFileError', projectFilePath) + `${err.message}`));
11
- return;
12
- }
13
- next();
14
- };
@@ -1,24 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const yaml = require('js-yaml');
4
- const i18n = require('i18n');
5
- module.exports = exports = ({ language: { lockFilePath }, node }, next) => {
6
- if (!lockFilePath || !lockFilePath.includes('yarn.lock')) {
7
- next();
8
- return;
9
- }
10
- try {
11
- node.rawYarnLockFileContents = fs.readFileSync(lockFilePath, 'utf8');
12
- node.yarnVersion = 1;
13
- if (!node.rawYarnLockFileContents.includes('lockfile v1') ||
14
- node.rawYarnLockFileContents.includes('__metadata')) {
15
- node.rawYarnLockFileContents = yaml.load(fs.readFileSync(lockFilePath, 'utf8'));
16
- node.yarnVersion = 2;
17
- }
18
- }
19
- catch (err) {
20
- next(new Error(i18n.__('nodeReadYarnLockFileError', lockFilePath) + `${err.message}`));
21
- return;
22
- }
23
- next();
24
- };
@@ -1,9 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ node }, next) => {
3
- delete node.rawProjectFileContents;
4
- delete node.projectFileJSON;
5
- delete node.projectLockFileJSON;
6
- delete node.rawLockFileContents;
7
- delete node.rawYarnLockFileContents;
8
- next();
9
- };
@@ -1,23 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('../AnalysisEngine');
3
- const readProjectFileContents = require('./readProjectFileContents');
4
- const readLockFileContents = require('./readLockFileContents');
5
- const parseLockFileContents = require('./parseLockFileContents');
6
- const sanitizer = require('./sanitizer');
7
- const i18n = require('i18n');
8
- module.exports = exports = (language, config, callback) => {
9
- const ae = new AnalysisEngine({ language, config, php: {} });
10
- ae.use([
11
- readProjectFileContents,
12
- readLockFileContents,
13
- parseLockFileContents,
14
- sanitizer
15
- ]);
16
- ae.analyze((err, analysis) => {
17
- if (err) {
18
- callback(new Error(i18n.__('phpAnalysisFailure') + `${err.message}`));
19
- return;
20
- }
21
- callback(null, analysis);
22
- });
23
- };
@@ -1,52 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- const _ = require('lodash');
4
- module.exports = exports = ({ language: { lockFilePath }, php }, next) => {
5
- try {
6
- php.lockFile = php.rawLockFileContents;
7
- let packages = _.keyBy(php.lockFile.packages, 'name');
8
- let packagesDev = _.keyBy(php.lockFile['packages-dev'], 'name');
9
- php.lockFile.dependencies = _.merge(packages, packagesDev);
10
- const listOfTopDep = Object.keys(php.lockFile.dependencies);
11
- Object.entries(php.lockFile.dependencies).forEach(([key, value]) => {
12
- if (value.require) {
13
- const listOfRequiresDep = Object.keys(value.require);
14
- listOfRequiresDep.forEach(dep => {
15
- if (!listOfTopDep.includes(dep)) {
16
- addChildDepToLockFileAsOwnObj(value['require'], dep);
17
- }
18
- });
19
- }
20
- if (value['require-dev']) {
21
- const listOfRequiresDep = Object.keys(value['require-dev']);
22
- listOfRequiresDep.forEach(dep => {
23
- if (!listOfTopDep.includes(dep)) {
24
- addChildDepToLockFileAsOwnObj(value['require-dev'], dep);
25
- }
26
- });
27
- }
28
- });
29
- formatParentDepToLockFile();
30
- }
31
- catch (err) {
32
- next(new Error(i18n.__('phpParseComposerLock', lockFilePath) + `${err.message}`));
33
- return;
34
- }
35
- next();
36
- function addChildDepToLockFileAsOwnObj(depObj, key) {
37
- php.lockFile.dependencies[key] = { version: depObj[key] };
38
- }
39
- function formatParentDepToLockFile() {
40
- for (const [key, value] of Object.entries(php.lockFile.dependencies)) {
41
- let requires = {};
42
- for (const [childKey, childValue] of Object.entries(value)) {
43
- if (childKey === 'require' || childKey === 'require-dev') {
44
- requires = _.merge(requires, childValue);
45
- php.lockFile.dependencies[key].requires = requires;
46
- delete php.lockFile.dependencies[key].require;
47
- delete php.lockFile.dependencies[key]['require-dev'];
48
- }
49
- }
50
- }
51
- }
52
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, php }, next) => {
5
- try {
6
- php.rawLockFileContents = JSON.parse(fs.readFileSync(lockFilePath));
7
- }
8
- catch (err) {
9
- next(new Error(i18n.__('phpReadError', lockFilePath) + `${err.message}`));
10
- return;
11
- }
12
- next();
13
- };
@@ -1,16 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = (analysis, next) => {
5
- const { language: { projectFilePath }, php } = analysis;
6
- try {
7
- php.composerJSON = JSON.parse(fs.readFileSync(projectFilePath, 'utf8'));
8
- php.composerJSON.dependencies = php.composerJSON.require;
9
- php.composerJSON.devDependencies = php.composerJSON['require-dev'];
10
- }
11
- catch (err) {
12
- next(new Error(i18n.__('phpReadProjectFileError', projectFilePath) + `${err.message}`));
13
- return;
14
- }
15
- next();
16
- };
@@ -1,5 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ php }, next) => {
3
- delete php.rawLockFileContents;
4
- next();
5
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('./../AnalysisEngine');
3
- const readPythonProjectFileContents = require('./readPythonProjectFileContents');
4
- const readPipfileLockFileContents = require('./readPipfileLockFileContents');
5
- const parseProjectFileContents = require('./parseProjectFileContents');
6
- const parsePipfileLockContents = require('./parsePipfileLockContents');
7
- const sanitizer = require('./sanitizer');
8
- const i18n = require('i18n');
9
- module.exports = exports = (language, config, callback) => {
10
- const ae = new AnalysisEngine({ language, config, python: {} });
11
- ae.use([
12
- readPythonProjectFileContents,
13
- parseProjectFileContents,
14
- readPipfileLockFileContents,
15
- parsePipfileLockContents,
16
- sanitizer
17
- ]);
18
- ae.analyze((err, analysis) => {
19
- if (err) {
20
- callback(new Error(i18n.__('pythonAnalysisEngineError') + `${err.message}`));
21
- return;
22
- }
23
- callback(null, analysis);
24
- });
25
- };
@@ -1,17 +0,0 @@
1
- "use strict";
2
- const i18n = require('i18n');
3
- module.exports = exports = ({ language: { lockFilePath }, python }, next) => {
4
- if (python.rawLockFileContents === undefined) {
5
- return next();
6
- }
7
- try {
8
- let parsedPipLock = JSON.parse(python.rawLockFileContents);
9
- parsedPipLock['defaults'] = parsedPipLock['default'];
10
- python.pipfileLock = parsedPipLock;
11
- }
12
- catch (err) {
13
- next(new Error(i18n.__('pythonAnalysisEnginePipError', lockFilePath ? lockFilePath : 'undefined') + `${err.message}`));
14
- return;
15
- }
16
- next();
17
- };
@@ -1,21 +0,0 @@
1
- "use strict";
2
- const multiReplace = require('string-multiple-replace');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ python }, next) => {
5
- const { rawProjectFileContents } = python;
6
- try {
7
- const matcherObj = { '"': '' };
8
- const sequencer = ['"'];
9
- const parsedPipfile = multiReplace(rawProjectFileContents, matcherObj, sequencer);
10
- const pythonArray = parsedPipfile.split('\n');
11
- python.pipfilDependanceies = pythonArray.filter(element => {
12
- return element != '' && !element.includes('#');
13
- });
14
- next();
15
- }
16
- catch (err) {
17
- next(new Error(i18n.__('pythonAnalysisParseProjectFileError', rawProjectFileContents) +
18
- `${err.message}`));
19
- return;
20
- }
21
- };
@@ -1,13 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { lockFilePath }, python }, next) => {
5
- try {
6
- python.rawLockFileContents = fs.readFileSync(lockFilePath);
7
- }
8
- catch (err) {
9
- next(new Error(i18n.__('pythonAnalysisReadPipFileError', lockFilePath) +
10
- `${err.message}`));
11
- }
12
- next();
13
- };
@@ -1,14 +0,0 @@
1
- "use strict";
2
- const fs = require('fs');
3
- const i18n = require('i18n');
4
- module.exports = exports = ({ language: { projectFilePath }, python }, next) => {
5
- try {
6
- python.rawProjectFileContents = fs.readFileSync(projectFilePath, 'utf8');
7
- next();
8
- }
9
- catch (err) {
10
- next(new Error(i18n.__('pythonAnalysisReadPythonProjectFileError', projectFilePath) +
11
- `${err.message}`));
12
- return;
13
- }
14
- };
@@ -1,7 +0,0 @@
1
- "use strict";
2
- module.exports = exports = ({ python }, next) => {
3
- delete python.rawProjectFileContents;
4
- delete python.rawLockFileContents;
5
- delete python.pipfileLock.default;
6
- next();
7
- };
@@ -1,25 +0,0 @@
1
- "use strict";
2
- const AnalysisEngine = require('./../AnalysisEngine');
3
- const readGemfileContents = require('./readGemfileContents');
4
- const readGemfileLockContents = require('./readGemfileLockContents');
5
- const parsedGemfile = require('./parsedGemfile');
6
- const parseGemfileLockFileContents = require('./parseGemfileLockContents');
7
- const sanitizer = require('./sanitizer');
8
- const i18n = require('i18n');
9
- module.exports = exports = (language, config, callback) => {
10
- const ae = new AnalysisEngine({ language, config, ruby: {} });
11
- ae.use([
12
- readGemfileContents,
13
- parsedGemfile,
14
- readGemfileLockContents,
15
- parseGemfileLockFileContents,
16
- sanitizer
17
- ]);
18
- ae.analyze((err, analysis) => {
19
- if (err) {
20
- callback(new Error(i18n.__('rubyAnalysisEngineError') + `${err.message}`));
21
- return;
22
- }
23
- callback(null, analysis);
24
- });
25
- };