async mapToAggregatedList()

in server/aws-lsp-codewhisperer/src/language-server/securityScan/securityScanHandler.ts [171:219]


    async mapToAggregatedList(json: string, projectPath: string) {
        const codeScanIssueMap: Map<string, RawCodeScanIssue[]> = new Map()
        const aggregatedCodeScanIssueList: AggregatedCodeScanIssue[] = []

        const codeScanIssues: RawCodeScanIssue[] = JSON.parse(json)

        codeScanIssues.forEach(issue => {
            if (codeScanIssueMap.has(issue.filePath)) {
                const list = codeScanIssueMap.get(issue.filePath)
                if (list === undefined) {
                    codeScanIssueMap.set(issue.filePath, [issue])
                } else {
                    list.push(issue)
                    codeScanIssueMap.set(issue.filePath, list)
                }
            } else {
                codeScanIssueMap.set(issue.filePath, [issue])
            }
        })

        for (const [relFilePath, issues] of codeScanIssueMap) {
            const filePath = path.join(projectPath, relFilePath)
            const fileExists = await this.workspace.fs.exists(filePath)
            if (fileExists) {
                const aggregatedCodeScanIssue = {
                    filePath: filePath,
                    issues: issues.map(issue => {
                        return {
                            startLine: issue.startLine - 1 >= 0 ? issue.startLine - 1 : 0,
                            endLine: issue.endLine,
                            comment: `${issue.title.trim()}: ${issue.description.text.trim()}`,
                            title: issue.title,
                            description: issue.description,
                            detectorId: issue.detectorId,
                            detectorName: issue.detectorName,
                            findingId: issue.findingId,
                            ruleId: issue.ruleId,
                            relatedVulnerabilities: issue.relatedVulnerabilities,
                            severity: issue.severity,
                            recommendation: issue.remediation.recommendation,
                            suggestedFixes: issue.remediation.suggestedFixes,
                        }
                    }),
                }
                aggregatedCodeScanIssueList.push(aggregatedCodeScanIssue)
            }
        }
        return aggregatedCodeScanIssueList
    }