@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.
- package/.prettierignore +0 -6
- package/dist/audit/catalogueApplication/catalogueApplication.js +23 -5
- package/dist/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -19
- package/dist/audit/languageAnalysisEngine/report/commonReportingFunctions.js +98 -37
- package/dist/audit/languageAnalysisEngine/report/models/reportListModel.js +2 -1
- package/dist/audit/languageAnalysisEngine/report/models/reportOutputModel.js +4 -3
- package/dist/audit/languageAnalysisEngine/report/models/severityCountModel.js +3 -0
- package/dist/audit/languageAnalysisEngine/report/reportingFeature.js +87 -19
- package/dist/audit/languageAnalysisEngine/report/utils/reportUtils.js +46 -16
- package/dist/audit/languageAnalysisEngine/sendSnapshot.js +57 -19
- package/dist/audit/save.js +37 -0
- package/dist/commands/audit/auditConfig.js +0 -16
- package/dist/commands/audit/auditController.js +18 -11
- package/dist/commands/audit/help.js +31 -25
- package/dist/commands/audit/processAudit.js +3 -3
- package/dist/commands/audit/saveFile.js +8 -4
- package/dist/commands/scan/sca/scaAnalysis.js +55 -10
- package/dist/common/HTTPClient.js +64 -23
- package/dist/common/errorHandling.js +6 -1
- package/dist/common/versionChecker.js +20 -5
- package/dist/constants/constants.js +7 -2
- package/dist/constants/locales.js +35 -38
- package/dist/constants.js +20 -13
- package/dist/index.js +55 -45
- package/dist/lambda/analytics.js +11 -0
- package/dist/lambda/lambda.js +38 -4
- package/dist/lambda/types.js +13 -0
- package/dist/sbom/generateSbom.js +5 -4
- package/dist/scaAnalysis/common/formatMessage.js +44 -1
- package/dist/scaAnalysis/common/treeUpload.js +4 -6
- package/dist/scaAnalysis/dotnet/analysis.js +43 -0
- package/dist/scaAnalysis/dotnet/index.js +10 -0
- package/dist/scaAnalysis/go/goReadDepFile.js +1 -3
- package/dist/scaAnalysis/java/analysis.js +5 -8
- package/dist/scaAnalysis/java/index.js +2 -2
- package/dist/scaAnalysis/javascript/analysis.js +107 -0
- package/dist/scaAnalysis/javascript/index.js +50 -0
- package/dist/scaAnalysis/php/analysis.js +70 -0
- package/dist/scaAnalysis/php/index.js +17 -0
- package/dist/scaAnalysis/python/analysis.js +42 -0
- package/dist/scaAnalysis/python/index.js +10 -0
- package/dist/scaAnalysis/ruby/analysis.js +218 -0
- package/dist/scaAnalysis/ruby/index.js +10 -0
- package/dist/scan/autoDetection.js +23 -22
- package/dist/scan/fileUtils.js +57 -20
- package/dist/scan/formatScanOutput.js +12 -14
- package/dist/scan/models/groupedResultsModel.js +1 -1
- package/dist/scan/models/scanResultsModel.js +3 -1
- package/dist/scan/populateProjectIdAndProjectName.js +2 -1
- package/dist/scan/scan.js +1 -0
- package/dist/scan/scanConfig.js +8 -3
- package/dist/scan/scanController.js +16 -3
- package/dist/scan/scanResults.js +5 -1
- package/dist/utils/commonApi.js +4 -1
- package/dist/utils/filterProjectPath.js +7 -2
- package/dist/utils/getConfig.js +1 -6
- package/package.json +12 -9
- package/src/audit/catalogueApplication/catalogueApplication.js +28 -7
- package/src/audit/languageAnalysisEngine/getProjectRootFilenames.js +10 -39
- package/src/audit/languageAnalysisEngine/report/commonReportingFunctions.ts +183 -68
- package/src/audit/languageAnalysisEngine/report/models/reportLibraryModel.ts +3 -3
- package/src/audit/languageAnalysisEngine/report/models/reportListModel.ts +18 -11
- package/src/audit/languageAnalysisEngine/report/models/reportOutputModel.ts +11 -5
- package/src/audit/languageAnalysisEngine/report/models/reportSeverityModel.ts +6 -1
- package/src/audit/languageAnalysisEngine/report/models/severityCountModel.ts +4 -0
- package/src/audit/languageAnalysisEngine/report/reportingFeature.ts +86 -32
- package/src/audit/languageAnalysisEngine/report/utils/reportUtils.ts +87 -32
- package/src/audit/languageAnalysisEngine/sendSnapshot.js +69 -20
- package/src/audit/save.js +48 -0
- package/src/commands/audit/auditConfig.ts +0 -25
- package/src/commands/audit/auditController.ts +18 -20
- package/src/commands/audit/help.ts +31 -25
- package/src/commands/audit/processAudit.ts +3 -6
- package/src/commands/audit/saveFile.ts +6 -2
- package/src/commands/scan/processScan.js +0 -1
- package/src/commands/scan/sca/scaAnalysis.js +84 -30
- package/src/common/HTTPClient.js +81 -34
- package/src/common/errorHandling.ts +10 -1
- package/src/common/versionChecker.ts +24 -5
- package/src/constants/constants.js +9 -3
- package/src/constants/locales.js +58 -43
- package/src/constants.js +21 -14
- package/src/index.ts +70 -58
- package/src/lambda/analytics.ts +9 -0
- package/src/lambda/arn.ts +2 -1
- package/src/lambda/lambda.ts +40 -17
- package/src/lambda/types.ts +36 -0
- package/src/lambda/utils.ts +2 -7
- package/src/sbom/generateSbom.ts +2 -2
- package/src/scaAnalysis/common/formatMessage.js +48 -1
- package/src/scaAnalysis/common/treeUpload.js +4 -6
- package/src/scaAnalysis/dotnet/analysis.js +54 -0
- package/src/scaAnalysis/dotnet/index.js +11 -0
- package/src/scaAnalysis/go/goAnalysis.js +2 -3
- package/src/scaAnalysis/go/goReadDepFile.js +1 -3
- package/src/scaAnalysis/java/analysis.js +7 -8
- package/src/scaAnalysis/java/index.js +2 -2
- package/src/scaAnalysis/javascript/analysis.js +126 -0
- package/src/scaAnalysis/javascript/index.js +72 -0
- package/src/scaAnalysis/php/analysis.js +78 -0
- package/src/scaAnalysis/php/index.js +22 -0
- package/src/scaAnalysis/python/analysis.js +49 -0
- package/src/scaAnalysis/python/index.js +11 -0
- package/src/scaAnalysis/ruby/analysis.js +273 -0
- package/src/scaAnalysis/ruby/index.js +11 -0
- package/src/scan/autoDetection.js +24 -26
- package/src/scan/fileUtils.js +60 -20
- package/src/scan/formatScanOutput.ts +14 -15
- package/src/scan/models/groupedResultsModel.ts +3 -3
- package/src/scan/models/resultContentModel.ts +1 -1
- package/src/scan/models/scanResultsModel.ts +5 -2
- package/src/scan/populateProjectIdAndProjectName.js +3 -1
- package/src/scan/scan.ts +1 -0
- package/src/scan/scanConfig.js +7 -5
- package/src/scan/scanController.js +18 -4
- package/src/scan/scanResults.js +10 -0
- package/src/utils/commonApi.js +4 -1
- package/src/utils/filterProjectPath.js +6 -2
- package/src/utils/getConfig.ts +1 -12
- package/dist/audit/AnalysisEngine.js +0 -37
- package/dist/audit/autodetection/autoDetectLanguage.js +0 -32
- package/dist/audit/dotnetAnalysisEngine/index.js +0 -25
- package/dist/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -35
- package/dist/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -15
- package/dist/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -18
- package/dist/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -14
- package/dist/audit/dotnetAnalysisEngine/sanitizer.js +0 -9
- package/dist/audit/goAnalysisEngine/index.js +0 -17
- package/dist/audit/goAnalysisEngine/parseProjectFileContents.js +0 -164
- package/dist/audit/goAnalysisEngine/readProjectFileContents.js +0 -21
- package/dist/audit/goAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/javaAnalysisEngine/index.js +0 -34
- package/dist/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -153
- package/dist/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -353
- package/dist/audit/javaAnalysisEngine/readProjectFileContents.js +0 -98
- package/dist/audit/javaAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -24
- package/dist/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -24
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -35
- package/dist/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -23
- package/dist/audit/languageAnalysisEngine/constants.js +0 -20
- package/dist/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -25
- package/dist/audit/languageAnalysisEngine/index.js +0 -39
- package/dist/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -87
- package/dist/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -150
- package/dist/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -40
- package/dist/audit/nodeAnalysisEngine/index.js +0 -31
- package/dist/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -18
- package/dist/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -18
- package/dist/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -17
- package/dist/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -14
- package/dist/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -24
- package/dist/audit/nodeAnalysisEngine/sanitizer.js +0 -9
- package/dist/audit/phpAnalysisEngine/index.js +0 -23
- package/dist/audit/phpAnalysisEngine/parseLockFileContents.js +0 -52
- package/dist/audit/phpAnalysisEngine/readLockFileContents.js +0 -13
- package/dist/audit/phpAnalysisEngine/readProjectFileContents.js +0 -16
- package/dist/audit/phpAnalysisEngine/sanitizer.js +0 -5
- package/dist/audit/pythonAnalysisEngine/index.js +0 -25
- package/dist/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -17
- package/dist/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -21
- package/dist/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -13
- package/dist/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -14
- package/dist/audit/pythonAnalysisEngine/sanitizer.js +0 -7
- package/dist/audit/rubyAnalysisEngine/index.js +0 -25
- package/dist/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -176
- package/dist/audit/rubyAnalysisEngine/parsedGemfile.js +0 -22
- package/dist/audit/rubyAnalysisEngine/readGemfileContents.js +0 -14
- package/dist/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -14
- package/dist/audit/rubyAnalysisEngine/sanitizer.js +0 -6
- package/src/audit/AnalysisEngine.js +0 -103
- package/src/audit/autodetection/autoDetectLanguage.ts +0 -40
- package/src/audit/dotnetAnalysisEngine/index.js +0 -26
- package/src/audit/dotnetAnalysisEngine/parseLockFileContents.js +0 -47
- package/src/audit/dotnetAnalysisEngine/parseProjectFileContents.js +0 -29
- package/src/audit/dotnetAnalysisEngine/readLockFileContents.js +0 -30
- package/src/audit/dotnetAnalysisEngine/readProjectFileContents.js +0 -26
- package/src/audit/dotnetAnalysisEngine/sanitizer.js +0 -11
- package/src/audit/goAnalysisEngine/index.js +0 -18
- package/src/audit/goAnalysisEngine/parseProjectFileContents.js +0 -209
- package/src/audit/goAnalysisEngine/readProjectFileContents.js +0 -31
- package/src/audit/goAnalysisEngine/sanitizer.js +0 -7
- package/src/audit/javaAnalysisEngine/index.js +0 -41
- package/src/audit/javaAnalysisEngine/parseMavenProjectFileContents.js +0 -222
- package/src/audit/javaAnalysisEngine/parseProjectFileContents.js +0 -420
- package/src/audit/javaAnalysisEngine/readProjectFileContents.js +0 -141
- package/src/audit/javaAnalysisEngine/sanitizer.js +0 -6
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedLanguages.js +0 -35
- package/src/audit/languageAnalysisEngine/checkForMultipleIdentifiedProjectFiles.js +0 -41
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasLockFile.js +0 -54
- package/src/audit/languageAnalysisEngine/checkIdentifiedLanguageHasProjectFile.js +0 -32
- package/src/audit/languageAnalysisEngine/constants.js +0 -23
- package/src/audit/languageAnalysisEngine/getIdentifiedLanguageInfo.js +0 -41
- package/src/audit/languageAnalysisEngine/index.js +0 -45
- package/src/audit/languageAnalysisEngine/languageAnalysisFactory.js +0 -116
- package/src/audit/languageAnalysisEngine/reduceIdentifiedLanguages.js +0 -249
- package/src/audit/nodeAnalysisEngine/handleNPMLockFileV2.js +0 -49
- package/src/audit/nodeAnalysisEngine/index.js +0 -35
- package/src/audit/nodeAnalysisEngine/parseNPMLockFileContents.js +0 -20
- package/src/audit/nodeAnalysisEngine/parseYarnLockFileContents.js +0 -26
- package/src/audit/nodeAnalysisEngine/readNPMLockFileContents.js +0 -23
- package/src/audit/nodeAnalysisEngine/readProjectFileContents.js +0 -27
- package/src/audit/nodeAnalysisEngine/readYarnLockFileContents.js +0 -36
- package/src/audit/nodeAnalysisEngine/sanitizer.js +0 -11
- package/src/audit/phpAnalysisEngine/index.js +0 -27
- package/src/audit/phpAnalysisEngine/parseLockFileContents.js +0 -60
- package/src/audit/phpAnalysisEngine/readLockFileContents.js +0 -14
- package/src/audit/phpAnalysisEngine/readProjectFileContents.js +0 -25
- package/src/audit/phpAnalysisEngine/sanitizer.js +0 -4
- package/src/audit/pythonAnalysisEngine/index.js +0 -55
- package/src/audit/pythonAnalysisEngine/parsePipfileLockContents.js +0 -23
- package/src/audit/pythonAnalysisEngine/parseProjectFileContents.js +0 -33
- package/src/audit/pythonAnalysisEngine/readPipfileLockFileContents.js +0 -16
- package/src/audit/pythonAnalysisEngine/readPythonProjectFileContents.js +0 -22
- package/src/audit/pythonAnalysisEngine/sanitizer.js +0 -9
- package/src/audit/rubyAnalysisEngine/index.js +0 -30
- package/src/audit/rubyAnalysisEngine/parseGemfileLockContents.js +0 -215
- package/src/audit/rubyAnalysisEngine/parsedGemfile.js +0 -39
- package/src/audit/rubyAnalysisEngine/readGemfileContents.js +0 -18
- package/src/audit/rubyAnalysisEngine/readGemfileLockContents.js +0 -17
- package/src/audit/rubyAnalysisEngine/sanitizer.js +0 -8
|
@@ -1,87 +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 fs = require('fs');
|
|
14
|
-
const chalk = require('chalk');
|
|
15
|
-
const saveFile = require('../../commands/audit/saveFile').default;
|
|
16
|
-
const generateSbom = require('../../sbom/generateSbom').default;
|
|
17
|
-
const { failSpinner, returnOra, startSpinner, succeedSpinner } = require('../../utils/oraWrapper');
|
|
18
|
-
module.exports = exports = (err, analysis) => {
|
|
19
|
-
const { identifiedLanguageInfo } = analysis.languageAnalysis;
|
|
20
|
-
const catalogueAppId = analysis.languageAnalysis.appId;
|
|
21
|
-
if (err) {
|
|
22
|
-
console.error(err);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
const langCallback = async (err, analysis) => {
|
|
26
|
-
const config = analysis.config;
|
|
27
|
-
if (err) {
|
|
28
|
-
console.log();
|
|
29
|
-
console.log('***********' +
|
|
30
|
-
i18n.__('languageAnalysisFactoryFailureHeader') +
|
|
31
|
-
'****************');
|
|
32
|
-
console.log(identifiedLanguageInfo.language);
|
|
33
|
-
console.log();
|
|
34
|
-
console.error(`${identifiedLanguageInfo.language}` +
|
|
35
|
-
i18n.__('languageAnalysisFailure') +
|
|
36
|
-
err);
|
|
37
|
-
return process.exit(5);
|
|
38
|
-
}
|
|
39
|
-
const reportSpinner = returnOra(i18n.__('auditSCAAnalysisBegins'));
|
|
40
|
-
startSpinner(reportSpinner);
|
|
41
|
-
const snapshotResponse = await newSendSnapShot(analysis, catalogueAppId);
|
|
42
|
-
succeedSpinner(reportSpinner, 'Contrast SCA analysis complete');
|
|
43
|
-
await vulnerabilityReport(analysis, catalogueAppId, snapshotResponse.id);
|
|
44
|
-
await auditSave(config);
|
|
45
|
-
};
|
|
46
|
-
if (identifiedLanguageInfo.language === DOTNET) {
|
|
47
|
-
dotnetAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
48
|
-
}
|
|
49
|
-
if (identifiedLanguageInfo.language === NODE) {
|
|
50
|
-
nodeAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
51
|
-
}
|
|
52
|
-
if (identifiedLanguageInfo.language === JAVA) {
|
|
53
|
-
javaAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
54
|
-
}
|
|
55
|
-
if (identifiedLanguageInfo.language === RUBY) {
|
|
56
|
-
rubyAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
57
|
-
}
|
|
58
|
-
if (identifiedLanguageInfo.language === PYTHON) {
|
|
59
|
-
pythonAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
60
|
-
}
|
|
61
|
-
if (identifiedLanguageInfo.language === PHP) {
|
|
62
|
-
phpAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
63
|
-
}
|
|
64
|
-
if (identifiedLanguageInfo.language === GO) {
|
|
65
|
-
goAE(identifiedLanguageInfo, analysis.config, langCallback);
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
async function auditSave(config) {
|
|
69
|
-
if (config.save) {
|
|
70
|
-
if (config.save.toLowerCase() === 'sbom') {
|
|
71
|
-
saveFile(config, await generateSbom(config));
|
|
72
|
-
const filename = `${config.applicationId}-sbom-cyclonedx.json`;
|
|
73
|
-
if (fs.existsSync(filename)) {
|
|
74
|
-
console.log(i18n.__('auditSBOMSaveSuccess') + ` - ${filename}`);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.log(chalk.yellow.bold(`\n Unable to save ${filename} Software Bill of Materials (SBOM)`));
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
console.log(i18n.__('auditBadFiletypeSpecifiedForSave'));
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
else if (config.save === null) {
|
|
85
|
-
console.log(i18n.__('auditNoFiletypeSpecifiedForSave'));
|
|
86
|
-
}
|
|
87
|
-
}
|
|
@@ -1,150 +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 = NODE;
|
|
40
|
-
}
|
|
41
|
-
if (isNodeLockFilename(filename)) {
|
|
42
|
-
deducedLanguages.push(filename);
|
|
43
|
-
language = NODE;
|
|
44
|
-
}
|
|
45
|
-
if (isGoProjectFilename(filename)) {
|
|
46
|
-
deducedLanguages.push({ language: GO, projectFilename: filename });
|
|
47
|
-
language = GO;
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
let identifiedLanguages = { [language]: deducedLanguages };
|
|
51
|
-
return identifiedLanguages;
|
|
52
|
-
};
|
|
53
|
-
const deduceLanguage = filename => {
|
|
54
|
-
const deducedLanguages = [];
|
|
55
|
-
if (isJavaMavenProjectFilename(filename)) {
|
|
56
|
-
deducedLanguages.push({ language: JAVA, projectFilename: filename });
|
|
57
|
-
}
|
|
58
|
-
if (isJavaGradleProjectFilename(filename)) {
|
|
59
|
-
deducedLanguages.push({ language: JAVA, projectFilename: filename });
|
|
60
|
-
}
|
|
61
|
-
if (isNodeProjectFilename(filename)) {
|
|
62
|
-
deducedLanguages.push({ language: NODE, projectFilename: filename });
|
|
63
|
-
}
|
|
64
|
-
if (isDotNetProjectFilename(filename)) {
|
|
65
|
-
deducedLanguages.push({ language: DOTNET, projectFilename: filename });
|
|
66
|
-
}
|
|
67
|
-
if (isRubyProjectFilename(filename)) {
|
|
68
|
-
deducedLanguages.push({ language: RUBY, projectFilename: filename });
|
|
69
|
-
}
|
|
70
|
-
if (isPythonProjectFilename(filename)) {
|
|
71
|
-
deducedLanguages.push({ language: PYTHON, projectFilename: filename });
|
|
72
|
-
}
|
|
73
|
-
if (isPhpProjectFilename(filename)) {
|
|
74
|
-
deducedLanguages.push({ language: PHP, projectFilename: filename });
|
|
75
|
-
}
|
|
76
|
-
if (isDotNetLockFilename(filename)) {
|
|
77
|
-
deducedLanguages.push({ language: DOTNET, lockFilename: filename });
|
|
78
|
-
}
|
|
79
|
-
if (isNodeLockFilename(filename)) {
|
|
80
|
-
deducedLanguages.push({ language: NODE, lockFilename: filename });
|
|
81
|
-
}
|
|
82
|
-
if (isRubyLockFilename(filename)) {
|
|
83
|
-
deducedLanguages.push({ language: RUBY, lockFilename: filename });
|
|
84
|
-
}
|
|
85
|
-
if (isPipfileLockLockFilename(filename)) {
|
|
86
|
-
deducedLanguages.push({ language: PYTHON, lockFilename: filename });
|
|
87
|
-
}
|
|
88
|
-
if (isPhpLockFilename(filename)) {
|
|
89
|
-
deducedLanguages.push({ language: PHP, lockFilename: filename });
|
|
90
|
-
}
|
|
91
|
-
if (isGoProjectFilename(filename)) {
|
|
92
|
-
deducedLanguages.push({ language: GO, projectFilename: filename });
|
|
93
|
-
}
|
|
94
|
-
return deducedLanguages;
|
|
95
|
-
};
|
|
96
|
-
const reduceIdentifiedLanguages = identifiedLanguages => identifiedLanguages.reduce((accumulator, identifiedLanguageInfo) => {
|
|
97
|
-
const { language, projectFilename, lockFilename } = identifiedLanguageInfo;
|
|
98
|
-
if (!(language in accumulator)) {
|
|
99
|
-
accumulator[language] = { projectFilenames: [], lockFilenames: [] };
|
|
100
|
-
}
|
|
101
|
-
if (projectFilename) {
|
|
102
|
-
accumulator[language].projectFilenames.push(projectFilename);
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
accumulator[language].lockFilenames.push(lockFilename);
|
|
106
|
-
}
|
|
107
|
-
return accumulator;
|
|
108
|
-
}, {});
|
|
109
|
-
module.exports = exports = (analysis, next) => {
|
|
110
|
-
const { projectPath, languageAnalysis, config } = analysis;
|
|
111
|
-
let identifiedLanguages = languageAnalysis.projectRootFilenames.reduce((accumulator, filename) => {
|
|
112
|
-
const deducedLanguages = deduceLanguage(filename);
|
|
113
|
-
return [...accumulator, ...deducedLanguages];
|
|
114
|
-
}, []);
|
|
115
|
-
if (Object.keys(identifiedLanguages).length === 0) {
|
|
116
|
-
next(new Error(i18n.__('languageAnalysisNoLanguage', projectPath)));
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
let language = config.language;
|
|
120
|
-
if (language === undefined) {
|
|
121
|
-
languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(identifiedLanguages);
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
let refinedIdentifiedLanguages = [];
|
|
125
|
-
for (let x in identifiedLanguages) {
|
|
126
|
-
if (identifiedLanguages[x].language === language.toUpperCase() ||
|
|
127
|
-
(identifiedLanguages[x].language === NODE &&
|
|
128
|
-
language.toUpperCase() === JAVASCRIPT)) {
|
|
129
|
-
refinedIdentifiedLanguages.push(identifiedLanguages[x]);
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
if (refinedIdentifiedLanguages.length === 0) {
|
|
133
|
-
console.log(`Could not detect language as specified: ${config.language}`);
|
|
134
|
-
process.exit(1);
|
|
135
|
-
}
|
|
136
|
-
languageAnalysis.identifiedLanguages = reduceIdentifiedLanguages(refinedIdentifiedLanguages);
|
|
137
|
-
}
|
|
138
|
-
next();
|
|
139
|
-
};
|
|
140
|
-
exports.isJavaMavenProjectFilename = isJavaMavenProjectFilename;
|
|
141
|
-
exports.isJavaGradleProjectFilename = isJavaGradleProjectFilename;
|
|
142
|
-
exports.isNodeProjectFilename = isNodeProjectFilename;
|
|
143
|
-
exports.isDotNetProjectFilename = isDotNetProjectFilename;
|
|
144
|
-
exports.isDotNetLockFilename = isDotNetLockFilename;
|
|
145
|
-
exports.isGoProjectFilename = isGoProjectFilename;
|
|
146
|
-
exports.isPhpProjectFilename = isPhpProjectFilename;
|
|
147
|
-
exports.isPhpLockFilename = isPhpLockFilename;
|
|
148
|
-
exports.deduceLanguage = deduceLanguage;
|
|
149
|
-
exports.reduceIdentifiedLanguages = reduceIdentifiedLanguages;
|
|
150
|
-
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,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,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,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
|
-
};
|