1- import type { Coverage , Range } from './parse-coverage.ts'
1+ import { is_valid_coverage , type Coverage , type Range } from './parse-coverage.ts'
22import { prettify } from './prettify.ts'
33import { deduplicate_entries } from './decuplicate.ts'
44import { filter_coverage } from './filter-entries.ts'
@@ -28,6 +28,11 @@ export type CoverageResult = CoverageData & {
2828 coverage_per_stylesheet : StylesheetCoverage [ ]
2929}
3030
31+ function ratio ( fraction : number , total : number ) {
32+ if ( total === 0 ) return 0
33+ return fraction / total
34+ }
35+
3136/**
3237 * @description
3338 * CSS Code Coverage calculation
@@ -41,6 +46,11 @@ export type CoverageResult = CoverageData & {
4146 */
4247export function calculate_coverage ( coverage : Coverage [ ] , parse_html : Parser ) : CoverageResult {
4348 let total_files_found = coverage . length
49+
50+ if ( ! is_valid_coverage ( coverage ) ) {
51+ throw new TypeError ( 'No valid coverage data found' )
52+ }
53+
4454 let filtered_coverage = filter_coverage ( coverage , parse_html )
4555 let prettified_coverage = prettify ( filtered_coverage )
4656 let deduplicated = deduplicate_entries ( prettified_coverage )
@@ -114,8 +124,8 @@ export function calculate_coverage(coverage: Coverage[], parse_html: Parser): Co
114124 unused_bytes : file_total_bytes - file_bytes_covered ,
115125 used_bytes : file_bytes_covered ,
116126 total_bytes : file_total_bytes ,
117- line_coverage_ratio : file_lines_covered / total_file_lines ,
118- byte_coverage_ratio : file_bytes_covered / file_total_bytes ,
127+ line_coverage_ratio : ratio ( file_lines_covered , total_file_lines ) ,
128+ byte_coverage_ratio : ratio ( file_bytes_covered , file_total_bytes ) ,
119129 line_coverage,
120130 total_lines : total_file_lines ,
121131 covered_lines : file_lines_covered ,
@@ -154,9 +164,13 @@ export function calculate_coverage(coverage: Coverage[], parse_html: Parser): Co
154164 covered_lines : total_covered_lines ,
155165 unused_bytes : total_unused_bytes ,
156166 uncovered_lines : total_uncovered_lines ,
157- byte_coverage_ratio : total_used_bytes / total_bytes ,
158- line_coverage_ratio : total_covered_lines / total_lines ,
167+ byte_coverage_ratio : ratio ( total_used_bytes , total_bytes ) ,
168+ line_coverage_ratio : ratio ( total_covered_lines , total_lines ) ,
159169 coverage_per_stylesheet,
160170 total_stylesheets : coverage_per_stylesheet . length ,
161171 }
162172}
173+
174+ export type { Coverage , Range } from './parse-coverage.ts'
175+ export { parse_coverage } from './parse-coverage.ts'
176+ export type { Parser } from './types.ts'
0 commit comments