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