diff --git a/packages/compiler-core/__tests__/parse.spec.ts b/packages/compiler-core/__tests__/parse.spec.ts index a93b5e0404c..790123ac67f 100644 --- a/packages/compiler-core/__tests__/parse.spec.ts +++ b/packages/compiler-core/__tests__/parse.spec.ts @@ -1812,6 +1812,16 @@ foo `\n foo bar ` ) }) + + it('should NOT condense whitespaces in RCDATA text mode', () => { + const ast = baseParse(``, { + getTextMode: ({ tag }) => + tag === 'textarea' ? TextModes.RCDATA : TextModes.DATA + }) + const preElement = ast.children[0] as ElementNode + expect(preElement.children).toHaveLength(1) + expect((preElement.children[0] as TextNode).content).toBe(`Text:\n foo`) + }) }) describe('Errors', () => { diff --git a/packages/compiler-core/src/parse.ts b/packages/compiler-core/src/parse.ts index d57ca77a03e..e847d55ed52 100644 --- a/packages/compiler-core/src/parse.ts +++ b/packages/compiler-core/src/parse.ts @@ -205,7 +205,7 @@ function parseChildren( // Whitespace management for more efficient output // (same as v2 whitespace: 'condense') let removedWhitespace = false - if (mode !== TextModes.RAWTEXT) { + if (mode !== TextModes.RAWTEXT && mode !== TextModes.RCDATA) { for (let i = 0; i < nodes.length; i++) { const node = nodes[i] if (!context.inPre && node.type === NodeTypes.TEXT) {