Skip to content

Commit 3c83583

Browse files
committed
Fix spread and boolean props
1 parent 11cd2b4 commit 3c83583

File tree

1 file changed

+15
-19
lines changed

1 file changed

+15
-19
lines changed

src/index.mjs

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)