Skip to content

Commit 23a457b

Browse files
committed
refactor: abstraction for v8ToIstanbul call
1 parent 6373ecc commit 23a457b

File tree

1 file changed

+27
-31
lines changed

1 file changed

+27
-31
lines changed

packages/coverage-v8/src/provider.ts

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -195,19 +195,11 @@ export class V8CoverageProvider extends BaseCoverageProvider<ResolvedCoverageOpt
195195
transform,
196196
)
197197

198-
const converter = v8ToIstanbul(
198+
coverageMap.merge(await this.v8ToIstanbul(
199199
filename.href,
200200
0,
201201
sources,
202-
undefined,
203-
this.options.ignoreEmptyLines,
204-
)
205-
206-
await converter.load()
207-
208-
try {
209-
// Create a made up function to mark whole file as uncovered. Note that this does not exist in source maps.
210-
converter.applyCoverage([{
202+
[{
211203
ranges: [
212204
{
213205
startOffset: 0,
@@ -218,19 +210,34 @@ export class V8CoverageProvider extends BaseCoverageProvider<ResolvedCoverageOpt
218210
isBlockCoverage: true,
219211
// This is magical value that indicates an empty report: https://github.com/istanbuljs/v8-to-istanbul/blob/fca5e6a9e6ef38a9cdc3a178d5a6cf9ef82e6cab/lib/v8-to-istanbul.js#LL131C40-L131C40
220212
functionName: '(empty-report)',
221-
}])
222-
}
223-
catch (error) {
224-
this.ctx.logger.error(`Failed to convert coverage for uncovered ${filename.href}.\n`, error)
225-
}
226-
227-
coverageMap.merge(converter.toIstanbul())
213+
}],
214+
))
228215
}))
229216
}
230217

231218
return coverageMap
232219
}
233220

221+
private async v8ToIstanbul(filename: string, wrapperLength: number, sources: Awaited<ReturnType<typeof this.getSources>>, functions: Profiler.FunctionCoverage[]) {
222+
const converter = v8ToIstanbul(
223+
filename,
224+
wrapperLength,
225+
sources,
226+
undefined,
227+
this.options.ignoreEmptyLines,
228+
)
229+
await converter.load()
230+
231+
try {
232+
converter.applyCoverage(functions)
233+
}
234+
catch (error) {
235+
this.ctx.logger.error(`Failed to convert coverage for ${filename}.\n`, error)
236+
}
237+
238+
return converter.toIstanbul()
239+
}
240+
234241
private async getSources<TransformResult extends (FetchResult | Awaited<ReturnType<typeof this.ctx.vitenode.transformRequest>>)>(
235242
url: string,
236243
transformResults: TransformResults,
@@ -351,23 +358,12 @@ export class V8CoverageProvider extends BaseCoverageProvider<ResolvedCoverageOpt
351358
functions,
352359
)
353360

354-
const converter = v8ToIstanbul(
361+
coverageMap.merge(await this.v8ToIstanbul(
355362
url,
356363
startOffset,
357364
sources,
358-
undefined,
359-
this.options.ignoreEmptyLines,
360-
)
361-
await converter.load()
362-
363-
try {
364-
converter.applyCoverage(functions)
365-
}
366-
catch (error) {
367-
this.ctx.logger.error(`Failed to convert coverage for ${url}.\n`, error)
368-
}
369-
370-
coverageMap.merge(converter.toIstanbul())
365+
functions,
366+
))
371367
}),
372368
)
373369
}

0 commit comments

Comments
 (0)