diff --git a/src/lexers/jsx-lexer.js b/src/lexers/jsx-lexer.js index d9ace4e5..964de504 100644 --- a/src/lexers/jsx-lexer.js +++ b/src/lexers/jsx-lexer.js @@ -134,6 +134,20 @@ export default class JsxLexer extends JavascriptLexer { nodeToString(node, sourceText) { const children = this.parseChildren.call(this, node.children, sourceText) + const flattenText = (children) => + children + .reduce((res, c) => { + const last = res[0] + if (last?.type == 'text' && c.type == 'text') { + const newContent = last.content + c.content + last.content = newContent + + return res + } + return [c].concat(res) + }, []) + .reverse() + const elemsToString = (children) => children .map((child, index) => { @@ -157,7 +171,7 @@ export default class JsxLexer extends JavascriptLexer { }) .join('') - return elemsToString(children) + return elemsToString(flattenText(children)) } parseChildren(children = [], sourceText) { diff --git a/test/lexers/jsx-lexer.test.js b/test/lexers/jsx-lexer.test.js index 9a333139..78fc71fb 100644 --- a/test/lexers/jsx-lexer.test.js +++ b/test/lexers/jsx-lexer.test.js @@ -350,6 +350,13 @@ describe('JsxLexer', () => { ) done() }) + + it('handles tags after spaces correctly', (done) => { + const Lexer = new JsxLexer({ transSupportBasicHtmlNodes: true }) + const content = 'a{" "}b' + assert.equal(Lexer.extract(content)[0].defaultValue, 'a <1>b') + done() + }) }) }) })