@@ -54,7 +54,9 @@ function genSSRElement (el: ASTElement, state: CodegenState): string {
54
54
} else if ( el . if && ! el . ifProcessed ) {
55
55
return genIf ( el , state , genSSRElement )
56
56
} else if ( el . tag === 'template' && ! el . slotTarget ) {
57
- return genSSRChildren ( el , state ) || 'void 0'
57
+ return el . ssrOptimizability === optimizability . FULL
58
+ ? genChildrenAsStringNode ( el , state )
59
+ : genSSRChildren ( el , state ) || 'void 0'
58
60
}
59
61
60
62
switch ( el . ssrOptimizability ) {
@@ -79,7 +81,7 @@ function genSSRElement (el: ASTElement, state: CodegenState): string {
79
81
function genNormalElement ( el , state , stringifyChildren ) {
80
82
const data = el . plain ? undefined : genData ( el , state )
81
83
const children = stringifyChildren
82
- ? genStringChildren ( el , state )
84
+ ? `[ ${ genChildrenAsStringNode ( el , state ) } ]`
83
85
: genSSRChildren ( el , state , true )
84
86
return `_c('${ el . tag } '${
85
87
data ? `,${ data } ` : ''
@@ -98,9 +100,9 @@ function genSSRNode (el, state) {
98
100
: genText ( el , state )
99
101
}
100
102
101
- function genStringChildren ( el , state ) {
103
+ function genChildrenAsStringNode ( el , state ) {
102
104
return el . children . length
103
- ? `[ _ssrNode(${ flattenSegments ( childrenToSegments ( el , state ) ) } )] `
105
+ ? `_ssrNode(${ flattenSegments ( childrenToSegments ( el , state ) ) } )`
104
106
: ''
105
107
}
106
108
@@ -200,24 +202,27 @@ function childrenToSegments (el, state): Array<StringSegment> {
200
202
if ( ( binding = el . attrsMap [ 'v-text' ] ) ) {
201
203
return [ { type : INTERPOLATION , value : binding } ]
202
204
}
205
+ return el . children
206
+ ? nodesToSegments ( el . children , state )
207
+ : [ ]
208
+ }
203
209
204
- const children = el . children
205
- if ( children ) {
206
- const segments = [ ]
207
- for ( let i = 0 ; i < children . length ; i ++ ) {
208
- const c = children [ i ]
209
- if ( c . type === 1 ) {
210
- segments . push . apply ( segments , elementToSegments ( c , state ) )
211
- } else if ( c . type === 2 ) {
212
- segments . push ( { type : INTERPOLATION , value : c . expression } )
213
- } else if ( c . type === 3 ) {
214
- segments . push ( { type : RAW , value : c . text } )
215
- }
210
+ function nodesToSegments (
211
+ children : Array < ASTNode > ,
212
+ state : CodegenState
213
+ ) : Array < StringSegment > {
214
+ const segments = [ ]
215
+ for ( let i = 0 ; i < children . length ; i ++ ) {
216
+ const c = children [ i ]
217
+ if ( c . type === 1 ) {
218
+ segments . push . apply ( segments , elementToSegments ( c , state ) )
219
+ } else if ( c . type === 2 ) {
220
+ segments . push ( { type : INTERPOLATION , value : c . expression } )
221
+ } else if ( c . type === 3 ) {
222
+ segments . push ( { type : RAW , value : c . text } )
216
223
}
217
- return segments
218
- } else {
219
- return [ ]
220
224
}
225
+ return segments
221
226
}
222
227
223
228
function flattenSegments ( segments : Array < StringSegment > ) : string {
0 commit comments