@@ -10,6 +10,7 @@ import "./style.css";
1010import {
1111 CoverageStatus ,
1212 FileCoverageReport ,
13+ FileCoverageReportResponse ,
1314 FileMetadata ,
1415 MessageType ,
1516} from "src/types" ;
@@ -121,30 +122,39 @@ async function execute(): Promise<void> {
121122 } ) ;
122123 }
123124
124- let coverageReport : any ;
125- if ( selectedFlags ?. length > 0 || selectedComponents ?. length > 0 ) {
126- let coverageReports = [ ] ;
127- if ( selectedFlags . length > 0 ) {
128- coverageReports = await Promise . all (
129- selectedFlags . map ( ( flag ) => getCommitReport ( metadata , flag , undefined ) )
130- ) ;
131- } else {
132- coverageReports = await Promise . all (
133- selectedComponents . map ( ( component ) =>
134- getCommitReport ( metadata , undefined , component )
135- )
136- ) ;
125+ let coverageReportResponses : Array < FileCoverageReportResponse > ;
126+ if ( selectedFlags ?. length > 0 ) {
127+ coverageReportResponses = await Promise . all (
128+ selectedFlags . map ( ( flag ) => getCommitReport ( metadata , flag , undefined ) )
129+ ) ;
130+ } else if ( selectedComponents ?. length > 0 ) {
131+ coverageReportResponses = await Promise . all (
132+ selectedComponents . map ( ( component ) =>
133+ getCommitReport ( metadata , undefined , component )
134+ )
135+ ) ;
136+ } else {
137+ coverageReportResponses = await Promise . all ( [
138+ await getCommitReport ( metadata , undefined , undefined ) ,
139+ ] ) ;
140+ }
141+
142+ const coverageReports = coverageReportResponses . map (
143+ ( reportResponse ) : FileCoverageReport => {
144+ const file = reportResponse . files ?. [ 0 ] ;
145+ return Object . fromEntries ( file ?. line_coverage || [ ] ) ;
137146 }
138- coverageReport = coverageReports
139- . map ( ( report ) => {
140- if ( report . files ?. length ) {
141- return Object . fromEntries ( report . files [ 0 ] . line_coverage ) ;
142- } else {
143- return { } ;
144- }
145- } )
146- . reduce ( ( finalReport , currentReport ) => {
147- return _ . mergeWith ( finalReport , currentReport , ( x , y ) => {
147+ ) ;
148+
149+ const coverageReport = ( ( ) : FileCoverageReport => {
150+ if ( coverageReports . length === 1 ) {
151+ return coverageReports [ 0 ] ;
152+ }
153+ return coverageReports . reduce ( ( finalReport , currentReport ) => {
154+ return _ . mergeWith (
155+ finalReport ,
156+ currentReport ,
157+ ( x : CoverageStatus , y : CoverageStatus ) => {
148158 if ( x === CoverageStatus . COVERED || y === CoverageStatus . COVERED ) {
149159 return CoverageStatus . COVERED ;
150160 } else if (
@@ -155,28 +165,19 @@ async function execute(): Promise<void> {
155165 } else {
156166 return CoverageStatus . UNCOVERED ;
157167 }
158- } ) ;
159- } , { } ) ;
160- if ( ! _ . isEmpty ( coverageReport ) ) {
161- globals . coverageReport = coverageReport ;
162- const coveragePct = calculateCoveragePct ( ) ;
163- updateButton ( `Coverage: ${ coveragePct . toFixed ( 2 ) } %` ) ;
164- } else {
165- updateButton ( `Coverage: N/A` ) ;
166- globals . coverageReport = { } ;
167- }
168+ }
169+ ) ;
170+ } , { } ) ;
171+ } ) ( ) ;
172+
173+ if ( ! _ . isEmpty ( coverageReport ) ) {
174+ const coveragePct = calculateCoveragePct ( coverageReport ) ;
175+ updateButton ( `Coverage: ${ coveragePct . toFixed ( 2 ) } %` ) ;
168176 } else {
169- coverageReport = await getCommitReport ( metadata , undefined , undefined ) ;
170- if ( coverageReport . files ?. length ) {
171- const fileReport = coverageReport . files [ 0 ] ;
172- updateButton ( `Coverage: ${ fileReport . totals . coverage } %` ) ;
173- globals . coverageReport = Object . fromEntries ( fileReport . line_coverage ) ;
174- } else {
175- updateButton ( `Coverage: N/A` ) ;
176- globals . coverageReport = { } ;
177- }
177+ updateButton ( `Coverage: N/A` ) ;
178178 }
179179
180+ globals . coverageReport = coverageReport ;
180181 animateAndAnnotateLines ( lineSelector , annotateLine ) ;
181182}
182183
@@ -227,10 +228,10 @@ async function handleComponentClick(selectedComponents: string[]) {
227228 await execute ( ) ;
228229}
229230
230- function calculateCoveragePct ( ) : number {
231- const x = Object . entries ( globals . coverageReport ! ) ;
232- const totalLines = x . length ;
233- const coveredLines = x . filter (
231+ function calculateCoveragePct ( coverageReport : FileCoverageReport ) : number {
232+ const report = Object . entries ( coverageReport ) ;
233+ const totalLines = report . length ;
234+ const coveredLines = report . filter (
234235 ( [ line , status ] ) => status !== CoverageStatus . UNCOVERED
235236 ) . length ;
236237 return ( coveredLines * 100 ) / totalLines ;
0 commit comments