@@ -45,8 +45,7 @@ function build(input) {
4545 let fieldIndex = 1 ;
4646 let field = '' ;
4747 let hasChildren = 0 ;
48- let propCount = 0 ;
49- let spreads = 0 ;
48+ let props = '' ;
5049 let quote = 0 ;
5150 let spread , slash , charCode , inTag , propName , propHasValue ;
5251
@@ -64,22 +63,19 @@ function build(input) {
6463 }
6564 else if ( mode === MODE_ATTRIBUTE || ( mode === MODE_WHITESPACE && buffer === '...' ) ) {
6665 if ( mode === MODE_WHITESPACE ) {
67- spread = true ;
68- if ( ! spreads ++ ) {
69- if ( propCount === 0 ) out + = ', Object.assign({},' ;
70- else out = out . replace ( / , \( \{ ( . * ? ) $ / , ', Object.assign({},{$1' ) + '},' ;
66+ if ( ! spread ) {
67+ spread = true ;
68+ if ( ! props ) props = 'Object.assign({},' ;
69+ else props = ' Object.assign({},' + props + '},' ;
7170 }
72- out += field + ',{' ;
73- propCount ++ ;
71+ props += field + ',{' ;
7472 }
7573 else if ( propName ) {
76- if ( ! spread ) out += ', ' ;
77- if ( propCount === 0 ) out += '({ ' ;
78- out += JSON . stringify ( propName ) + ':' ;
79- out += field || ( ( propHasValue || buffer ) && JSON . stringify ( buffer ) ) || 'true' ;
74+ if ( ! props ) props += '{ ' ;
75+ else if ( ! props . endsWith ( '{' ) ) props += ', ' ;
76+ props += JSON . stringify ( propName ) + ':' ;
77+ props += field || ( ( propHasValue || buffer ) && JSON . stringify ( buffer ) ) || 'true' ;
8078 propName = '' ;
81- spread = false ;
82- propCount ++ ;
8379 }
8480 propHasValue = false ;
8581 }
@@ -123,7 +119,7 @@ function build(input) {
123119 // commit buffer
124120 commit ( ) ;
125121 inTag = true ;
126- propCount = 0 ;
122+ props = '' ;
127123 slash = spread = propHasValue = false ;
128124 mode = MODE_TAGNAME ;
129125 continue ;
@@ -133,18 +129,18 @@ function build(input) {
133129 if ( inTag ) {
134130 commit ( ) ;
135131 if ( mode !== MODE_SKIP ) {
136- if ( propCount === 0 ) {
132+ if ( ! props ) {
137133 out += ',null' ;
138134 }
139135 else {
140- out += '})' ;
136+ out += ',' + props + '}' + ( spread ? ')' : '' ) ;
141137 }
142138 }
143139 if ( slash ) {
144140 out += ')' ;
145141 }
146- inTag = false ;
147- propCount = 0 ;
142+ spread = inTag = false ;
143+ props = '' ;
148144 mode = MODE_TEXT ;
149145 continue ;
150146 }
0 commit comments