1
1
/* @flow */
2
2
3
3
import runInVm from './run-in-vm'
4
- import { PassThrough } from 'stream'
5
4
import type { Renderer , RenderOptions } from './create-renderer'
5
+ import { createSourceMapConsumers , rewriteErrorTrace } from './source-map-support'
6
+
7
+ const PassThrough = require ( 'stream' ) . PassThrough
6
8
7
9
const INVALID_MSG =
8
10
'Invalid server-rendering bundle format. Should be a string ' +
@@ -24,16 +26,18 @@ type RenderBundle = string | {
24
26
export function createBundleRendererCreator ( createRenderer : ( ) = > Renderer ) {
25
27
return ( bundle : RenderBundle , rendererOptions ? : RenderOptions ) => {
26
28
const renderer = createRenderer ( rendererOptions )
27
- let files , entry
29
+ let files , entry, maps
28
30
if ( typeof bundle === 'object' ) {
29
31
entry = bundle . entry
30
32
files = bundle . files
33
+ maps = createSourceMapConsumers ( bundle . maps )
31
34
if ( typeof entry !== 'string' || typeof files !== 'object' ) {
32
35
throw new Error ( INVALID_MSG )
33
36
}
34
37
} else if ( typeof bundle === 'string' ) {
35
38
entry = '__vue_ssr_bundle__'
36
39
files = { '__vue_ssr_bundle__' : bundle }
40
+ maps = { }
37
41
} else {
38
42
throw new Error ( INVALID_MSG )
39
43
}
@@ -45,18 +49,23 @@ export function createBundleRendererCreator (createRenderer: () => Renderer) {
45
49
}
46
50
runInVm ( entry , files , context ) . then ( app => {
47
51
renderer . renderToString ( app , cb )
48
- } ) . catch ( cb )
52
+ } ) . catch ( err => {
53
+ rewriteErrorTrace ( err , maps )
54
+ cb ( err )
55
+ } )
49
56
} ,
50
57
renderToStream : ( context ? : Object ) => {
51
58
const res = new PassThrough ( )
52
59
runInVm ( entry , files , context ) . then ( app => {
53
60
const renderStream = renderer . renderToStream ( app )
54
61
renderStream . on ( 'error' , err => {
62
+ rewriteErrorTrace ( err , maps )
55
63
res . emit ( 'error' , err )
56
64
} )
57
65
renderStream . pipe ( res )
58
66
} ) . catch ( err => {
59
67
process . nextTick ( ( ) => {
68
+ rewriteErrorTrace ( err , maps )
60
69
res . emit ( 'error' , err )
61
70
} )
62
71
} )
0 commit comments