@@ -51,6 +51,7 @@ const WRAPPER_LENGTH = 185
51
51
52
52
// Note that this needs to match the line ending as well
53
53
const VITE_EXPORTS_LINE_PATTERN = / O b j e c t \. d e f i n e P r o p e r t y \( _ _ v i t e _ s s r _ e x p o r t s _ _ .* \n / g
54
+ const DECORATOR_METADATA_PATTERN = / _ t s _ m e t a d a t a \( " d e s i g n : p a r a m t y p e s " ( \s | .) + ?] \) , / g
54
55
const DEFAULT_PROJECT = Symbol . for ( 'default-project' )
55
56
56
57
const debug = createDebug ( 'vitest:coverage' )
@@ -312,7 +313,7 @@ export class V8CoverageProvider extends BaseCoverageProvider implements Coverage
312
313
originalSource : sourcesContent ,
313
314
source : code || sourcesContent ,
314
315
sourceMap : {
315
- sourcemap : removeViteHelpersFromSourceMaps ( code , {
316
+ sourcemap : excludeGeneratedCode ( code , {
316
317
...map ,
317
318
version : 3 ,
318
319
sources : [ url ] ,
@@ -363,21 +364,24 @@ async function transformCoverage(coverageMap: CoverageMap) {
363
364
/**
364
365
* Remove generated code from the source maps:
365
366
* - Vite's export helpers: e.g. `Object.defineProperty(__vite_ssr_exports__, "sum", { enumerable: true, configurable: true, get(){ return sum }});`
367
+ * - SWC's decorator metadata: e.g. `_ts_metadata("design:paramtypes", [\ntypeof Request === "undefined" ? Object : Request\n]),`
366
368
*/
367
- function removeViteHelpersFromSourceMaps ( source : string | undefined , map : EncodedSourceMap ) {
368
- if ( ! source || ! source . match ( VITE_EXPORTS_LINE_PATTERN ) )
369
+ function excludeGeneratedCode ( source : string | undefined , map : EncodedSourceMap ) {
370
+ if ( ! source )
369
371
return map
370
372
371
- const sourceWithoutHelpers = new MagicString ( source )
372
- sourceWithoutHelpers . replaceAll ( VITE_EXPORTS_LINE_PATTERN , '\n' )
373
+ if ( ! source . match ( VITE_EXPORTS_LINE_PATTERN ) && ! source . match ( DECORATOR_METADATA_PATTERN ) )
374
+ return map
375
+
376
+ const trimmed = new MagicString ( source )
377
+ trimmed . replaceAll ( VITE_EXPORTS_LINE_PATTERN , '\n' )
378
+ trimmed . replaceAll ( DECORATOR_METADATA_PATTERN , match => '\n' . repeat ( match . split ( '\n' ) . length - 1 ) )
373
379
374
- const mapWithoutHelpers = sourceWithoutHelpers . generateMap ( {
375
- hires : 'boundary' ,
376
- } )
380
+ const trimmedMap = trimmed . generateMap ( { hires : 'boundary' } )
377
381
378
- // A merged source map where the first one excludes helpers
382
+ // A merged source map where the first one excludes generated parts
379
383
const combinedMap = remapping (
380
- [ { ...mapWithoutHelpers , version : 3 } , map ] ,
384
+ [ { ...trimmedMap , version : 3 } , map ] ,
381
385
( ) => null ,
382
386
)
383
387
0 commit comments