@@ -33,23 +33,23 @@ const INVALID_ATTR_NAME_CHAR_REGEX =
3333 * @returns {void }
3434 */
3535export function element ( payload , tag , attributes_fn = noop , children_fn = noop ) {
36- payload . out += '<!---->' ;
36+ payload . out . push ( '<!---->' ) ;
3737
3838 if ( tag ) {
39- payload . out += `<${ tag } ` ;
39+ payload . out . push ( `<${ tag } ` ) ;
4040 attributes_fn ( ) ;
41- payload . out += `>` ;
41+ payload . out . push ( `>` ) ;
4242
4343 if ( ! is_void ( tag ) ) {
4444 children_fn ( ) ;
4545 if ( ! is_raw_text_element ( tag ) ) {
46- payload . out += EMPTY_COMMENT ;
46+ payload . out . push ( EMPTY_COMMENT ) ;
4747 }
48- payload . out += `</${ tag } >` ;
48+ payload . out . push ( `</${ tag } >` ) ;
4949 }
5050 }
5151
52- payload . out += '<!---->' ;
52+ payload . out . push ( '<!---->' ) ;
5353}
5454
5555/**
@@ -72,7 +72,7 @@ export function render(component, options = {}) {
7272
7373 const prev_on_destroy = on_destroy ;
7474 on_destroy = [ ] ;
75- payload . out += BLOCK_OPEN ;
75+ payload . out . push ( BLOCK_OPEN ) ;
7676
7777 let reset_reset_element ;
7878
@@ -97,20 +97,22 @@ export function render(component, options = {}) {
9797 reset_reset_element ( ) ;
9898 }
9999
100- payload . out += BLOCK_CLOSE ;
100+ payload . out . push ( BLOCK_CLOSE ) ;
101101 for ( const cleanup of on_destroy ) cleanup ( ) ;
102102 on_destroy = prev_on_destroy ;
103103
104- let head = payload . head . out + payload . head . title ;
104+ let head = payload . head . out . join ( '' ) + payload . head . title ;
105105
106106 for ( const { hash, code } of payload . css ) {
107107 head += `<style id="${ hash } ">${ code } </style>` ;
108108 }
109109
110+ const body = payload . out . join ( '' ) ;
111+
110112 return {
111113 head,
112- html : payload . out ,
113- body : payload . out
114+ html : body ,
115+ body : body
114116 } ;
115117 } finally {
116118 abort ( ) ;
@@ -124,9 +126,9 @@ export function render(component, options = {}) {
124126 */
125127export function head ( payload , fn ) {
126128 const head_payload = payload . head ;
127- head_payload . out += BLOCK_OPEN ;
129+ head_payload . out . push ( BLOCK_OPEN ) ;
128130 fn ( head_payload ) ;
129- head_payload . out += BLOCK_CLOSE ;
131+ head_payload . out . push ( BLOCK_CLOSE ) ;
130132}
131133
132134/**
@@ -141,21 +143,21 @@ export function css_props(payload, is_html, props, component, dynamic = false) {
141143 const styles = style_object_to_string ( props ) ;
142144
143145 if ( is_html ) {
144- payload . out += `<svelte-css-wrapper style="display: contents; ${ styles } ">` ;
146+ payload . out . push ( `<svelte-css-wrapper style="display: contents; ${ styles } ">` ) ;
145147 } else {
146- payload . out += `<g style="${ styles } ">` ;
148+ payload . out . push ( `<g style="${ styles } ">` ) ;
147149 }
148150
149151 if ( dynamic ) {
150- payload . out += '<!---->' ;
152+ payload . out . push ( '<!---->' ) ;
151153 }
152154
153155 component ( ) ;
154156
155157 if ( is_html ) {
156- payload . out += `<!----></svelte-css-wrapper>` ;
158+ payload . out . push ( `<!----></svelte-css-wrapper>` ) ;
157159 } else {
158- payload . out += `<!----></g>` ;
160+ payload . out . push ( `<!----></g>` ) ;
159161 }
160162}
161163
@@ -440,13 +442,13 @@ export function bind_props(props_parent, props_now) {
440442 */
441443function await_block ( payload , promise , pending_fn , then_fn ) {
442444 if ( is_promise ( promise ) ) {
443- payload . out += BLOCK_OPEN ;
445+ payload . out . push ( BLOCK_OPEN ) ;
444446 promise . then ( null , noop ) ;
445447 if ( pending_fn !== null ) {
446448 pending_fn ( ) ;
447449 }
448450 } else if ( then_fn !== null ) {
449- payload . out += BLOCK_OPEN_ELSE ;
451+ payload . out . push ( BLOCK_OPEN_ELSE ) ;
450452 then_fn ( promise ) ;
451453 }
452454}
@@ -493,7 +495,7 @@ export function once(get_value) {
493495 */
494496export function props_id ( payload ) {
495497 const uid = payload . uid ( ) ;
496- payload . out += '<!--#' + uid + '-->' ;
498+ payload . out . push ( '<!--#' + uid + '-->' ) ;
497499 return uid ;
498500}
499501
@@ -562,10 +564,13 @@ export function valueless_option(payload, children) {
562564
563565 children ( ) ;
564566
565- var body = payload . out . slice ( i ) ;
567+ var body = payload . out . slice ( i ) . join ( '' ) ;
566568
567569 if ( body . replace ( / < ! - - - - > / g, '' ) === payload . select_value ) {
568570 // replace '>' with ' selected>' (closing tag will be added later)
569- payload . out = payload . out . slice ( 0 , i - 1 ) + ' selected>' + body ;
571+ var last_item = payload . out [ i - 1 ] ;
572+ payload . out [ i - 1 ] = last_item . slice ( 0 , - 1 ) + ' selected>' ;
573+ // Remove the old items after position i and add the body as a single item
574+ payload . out . splice ( i , payload . out . length - i , body ) ;
570575 }
571576}
0 commit comments