@@ -33,7 +33,7 @@ export function createMethodsRPC(project: WorkspaceProject, options: MethodsOpti
33
33
return r ?. map as RawSourceMap | undefined
34
34
} ,
35
35
async fetch ( id , transformMode ) {
36
- const result = await project . vitenode . fetchResult ( id , transformMode )
36
+ const result = await project . vitenode . fetchResult ( id , transformMode ) . catch ( handleRollupError )
37
37
const code = result . code
38
38
if ( ! cacheFs || result . externalize ) {
39
39
return result
@@ -66,10 +66,10 @@ export function createMethodsRPC(project: WorkspaceProject, options: MethodsOpti
66
66
return { id : tmp }
67
67
} ,
68
68
resolveId ( id , importer , transformMode ) {
69
- return project . vitenode . resolveId ( id , importer , transformMode )
69
+ return project . vitenode . resolveId ( id , importer , transformMode ) . catch ( handleRollupError )
70
70
} ,
71
71
transform ( id , environment ) {
72
- return project . vitenode . transformModule ( id , environment )
72
+ return project . vitenode . transformModule ( id , environment ) . catch ( handleRollupError )
73
73
} ,
74
74
onPathsCollected ( paths ) {
75
75
ctx . state . collectPaths ( paths )
@@ -104,3 +104,23 @@ export function createMethodsRPC(project: WorkspaceProject, options: MethodsOpti
104
104
} ,
105
105
}
106
106
}
107
+
108
+ // serialize rollup error on server to preserve details as a test error
109
+ function handleRollupError ( e : unknown ) : never {
110
+ if ( e instanceof Error && 'plugin' in e ) {
111
+ // eslint-disable-next-line no-throw-literal
112
+ throw {
113
+ name : e . name ,
114
+ message : e . message ,
115
+ stack : e . stack ,
116
+ cause : e . cause ,
117
+ __vitest_rollup_error__ : {
118
+ plugin : ( e as any ) . plugin ,
119
+ id : ( e as any ) . id ,
120
+ loc : ( e as any ) . loc ,
121
+ frame : ( e as any ) . frame ,
122
+ } ,
123
+ }
124
+ }
125
+ throw e
126
+ }
0 commit comments