File tree 3 files changed +27
-5
lines changed
3 files changed +27
-5
lines changed Original file line number Diff line number Diff line change @@ -48,7 +48,10 @@ import { TransformOptions as EsbuildTransformOptions } from 'esbuild'
48
48
import { DepOptimizationMetadata , optimizeDeps } from '../optimizer'
49
49
import { ssrLoadModule } from '../ssr/ssrModuleLoader'
50
50
import { resolveSSRExternal } from '../ssr/ssrExternal'
51
- import { ssrRewriteStacktrace } from '../ssr/ssrStacktrace'
51
+ import {
52
+ rebindErrorStacktrace ,
53
+ ssrRewriteStacktrace
54
+ } from '../ssr/ssrStacktrace'
52
55
import { createMissingImporterRegisterFn } from '../optimizer/registerMissing'
53
56
import { printServerUrls } from '../logger'
54
57
import { resolveHostname } from '../utils'
@@ -366,7 +369,8 @@ export async function createServer(
366
369
} ,
367
370
ssrFixStacktrace ( e ) {
368
371
if ( e . stack ) {
369
- e . stack = ssrRewriteStacktrace ( e . stack , moduleGraph )
372
+ const stacktrace = ssrRewriteStacktrace ( e . stack , moduleGraph )
373
+ rebindErrorStacktrace ( e , stacktrace )
370
374
}
371
375
} ,
372
376
listen ( port ?: number , isRestart ?: boolean ) {
Original file line number Diff line number Diff line change @@ -2,7 +2,7 @@ import fs from 'fs'
2
2
import path from 'path'
3
3
import { ViteDevServer } from '..'
4
4
import { cleanUrl , resolveFrom , unwrapId } from '../utils'
5
- import { ssrRewriteStacktrace } from './ssrStacktrace'
5
+ import { rebindErrorStacktrace , ssrRewriteStacktrace } from './ssrStacktrace'
6
6
import {
7
7
ssrExportAllKey ,
8
8
ssrModuleExportsKey ,
@@ -141,9 +141,10 @@ async function instantiateModule(
141
141
ssrExportAll
142
142
)
143
143
} catch ( e ) {
144
- e . stack = ssrRewriteStacktrace ( e . stack , moduleGraph )
144
+ const stacktrace = ssrRewriteStacktrace ( e . stack , moduleGraph )
145
+ rebindErrorStacktrace ( e , stacktrace )
145
146
server . config . logger . error (
146
- `Error when evaluating SSR module ${ url } :\n${ e . stack } ` ,
147
+ `Error when evaluating SSR module ${ url } :\n${ stacktrace } ` ,
147
148
{
148
149
timestamp : true ,
149
150
clear : server . config . clearScreen
Original file line number Diff line number Diff line change @@ -56,3 +56,20 @@ export function ssrRewriteStacktrace(
56
56
} )
57
57
. join ( '\n' )
58
58
}
59
+
60
+ export function rebindErrorStacktrace ( e : Error , stacktrace : string ) : void {
61
+ const { configurable, writable } = Object . getOwnPropertyDescriptor (
62
+ e ,
63
+ 'stack'
64
+ ) !
65
+ if ( configurable ) {
66
+ Object . defineProperty ( e , 'stack' , {
67
+ value : stacktrace ,
68
+ enumerable : true ,
69
+ configurable : true ,
70
+ writable : true
71
+ } )
72
+ } else if ( writable ) {
73
+ e . stack = stacktrace
74
+ }
75
+ }
You can’t perform that action at this time.
0 commit comments