UNPKG

apex-code-coverage-transformer

Version:

Transform Salesforce Apex code coverage JSONs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.

314 lines (313 loc) 7.63 kB
import { getCoverageHandler } from '../handlers/getHandler.js'; export type TransformerTransformResult = { path: string[]; }; export type DeployCoverageData = { [className: string]: { fnMap: Record<string, unknown>; branchMap: Record<string, unknown>; path: string; f: Record<string, unknown>; b: Record<string, unknown>; s: Record<string, number>; statementMap: Record<string, { start: { line: number; column: number; }; end: { line: number; column: number; }; }>; }; }; export type TestCoverageData = { id: string; name: string; totalLines: number; lines: Record<string, number>; totalCovered: number; coveredPercent: number; }; export type SfdxProject = { packageDirectories: Array<{ path: string; }>; }; export type CoverageProcessingContext = { handlers: Map<string, ReturnType<typeof getCoverageHandler>>; packageDirs: string[]; repoRoot: string; concurrencyLimit: number; warnings: string[]; filePathCache: Map<string, string>; }; type SonarLine = { '@lineNumber': number; '@covered': boolean; }; export type SonarClass = { '@path': string; lineToCover: SonarLine[]; }; export type SonarCoverageObject = { coverage: { file: SonarClass[]; '@version': string; }; }; export type HookFile = { deployCoverageJsonPath: string; testCoverageJsonPath: string; outputReportPath: string; format: string; ignorePackageDirectories: string; }; export type CoberturaLine = { '@number': number; '@hits': number; '@branch': string; }; export type CoberturaClass = { '@name': string; '@filename': string; '@line-rate': number; '@branch-rate': number; methods: Record<string, never>; lines: { line: CoberturaLine[]; }; }; export type CoberturaPackage = { '@name': string; '@line-rate': number; '@branch-rate': number; classes: { class: CoberturaClass[]; }; }; export type CoberturaCoverageObject = { coverage: { '@lines-valid': number; '@lines-covered': number; '@line-rate': number; '@branches-valid': number; '@branches-covered': number; '@branch-rate': number | string; '@timestamp': number; '@complexity': number; '@version': string; sources: { source: string[]; }; packages: { package: CoberturaPackage[]; }; }; }; export type CloverLine = { '@num': number; '@count': number; '@type': string; }; export type CloverFile = { '@name': string; '@path': string; metrics: { '@statements': number; '@coveredstatements': number; '@conditionals': number; '@coveredconditionals': number; '@methods': number; '@coveredmethods': number; }; line: CloverLine[]; }; type CloverProjectMetrics = { '@statements': number; '@coveredstatements': number; '@conditionals': number; '@coveredconditionals': number; '@methods': number; '@coveredmethods': number; '@elements': number; '@coveredelements': number; '@complexity': number; '@loc': number; '@ncloc': number; '@packages': number; '@files': number; '@classes': number; }; type CloverProject = { '@timestamp': number; '@name': string; metrics: CloverProjectMetrics; file: CloverFile[]; }; export type CloverCoverageObject = { coverage: { '@generated': number; '@clover': string; project: CloverProject; }; }; export type CoverageHandler = { processFile(filePath: string, fileName: string, lines: Record<string, number>): void; finalize(): SonarCoverageObject | CoberturaCoverageObject | CloverCoverageObject | LcovCoverageObject | JaCoCoCoverageObject | IstanbulCoverageObject | JsonSummaryCoverageObject | SimpleCovCoverageObject | OpenCoverCoverageObject; }; type LcovLine = { lineNumber: number; hitCount: number; }; export type LcovFile = { sourceFile: string; lines: LcovLine[]; totalLines: number; coveredLines: number; }; export type LcovCoverageObject = { files: LcovFile[]; }; export type JaCoCoCoverageObject = { report: { '@name': string; package: JaCoCoPackage[]; counter: JaCoCoCounter[]; }; }; export type JaCoCoPackage = { '@name': string; sourcefile: JaCoCoSourceFile[]; counter: JaCoCoCounter[]; }; export type JaCoCoSourceFile = { '@name': string; line: JaCoCoLine[]; counter: JaCoCoCounter[]; }; export type JaCoCoLine = { '@nr': number; '@mi': number; '@ci': number; '@mb'?: number; '@cb'?: number; }; export type JaCoCoCounter = { '@type': 'INSTRUCTION' | 'BRANCH' | 'LINE' | 'METHOD' | 'CLASS' | 'PACKAGE'; '@missed': number; '@covered': number; }; export type IstanbulCoverageMap = { [filePath: string]: IstanbulCoverageFile; }; export type IstanbulCoverageFile = { path: string; statementMap: Record<string, SourceRange>; fnMap: Record<string, FunctionMapping>; branchMap: Record<string, BranchMapping>; s: Record<string, number>; f: Record<string, number>; b: Record<string, number[]>; l: Record<string, number>; }; export type SourcePosition = { line: number; column: number; }; export type SourceRange = { start: SourcePosition; end: SourcePosition; }; export type FunctionMapping = { name: string; decl: SourceRange; loc: SourceRange; line: number; }; export type BranchMapping = { loc: SourceRange; type: string; locations: SourceRange[]; line: number; }; export type IstanbulCoverageObject = IstanbulCoverageMap; export type JsonSummaryFileCoverage = { lines: { total: number; covered: number; skipped: number; pct: number; }; statements: { total: number; covered: number; skipped: number; pct: number; }; }; export type JsonSummaryCoverageObject = { total: JsonSummaryFileCoverage; files: { [filePath: string]: JsonSummaryFileCoverage; }; }; export type SimpleCovCoverageObject = { coverage: { [filePath: string]: Array<number | null>; }; timestamp: number; }; export type OpenCoverSequencePoint = { '@vc': number; '@sl': number; '@sc'?: number; '@el'?: number; '@ec'?: number; }; export type OpenCoverMethod = { '@name': string; '@isConstructor'?: boolean; '@isStatic'?: boolean; '@isGetter'?: boolean; '@isSetter'?: boolean; SequencePoints: { SequencePoint: OpenCoverSequencePoint[]; }; }; export type OpenCoverClass = { '@fullName': string; Methods: { Method: OpenCoverMethod[]; }; }; export type OpenCoverFile = { '@uid': number; '@fullPath': string; }; export type OpenCoverModule = { '@hash': string; Files: { File: OpenCoverFile[]; }; Classes: { Class: OpenCoverClass[]; }; }; export type OpenCoverCoverageObject = { CoverageSession: { Summary: { '@numSequencePoints': number; '@visitedSequencePoints': number; '@numBranchPoints': number; '@visitedBranchPoints': number; '@sequenceCoverage': number; '@branchCoverage': number; }; Modules: { Module: OpenCoverModule[]; }; }; }; export {};