fix(sfc): treat custom block content as raw text
This commit is contained in:
@@ -78,8 +78,8 @@ h1 { color: red }
|
||||
<template v-if="ok">ok</template>
|
||||
<div><div></div></div>
|
||||
`
|
||||
const sfc = parse(`<template>${content}</template>`).descriptor
|
||||
expect(sfc.template!.content).toBe(content)
|
||||
const { descriptor } = parse(`<template>${content}</template>`)
|
||||
expect(descriptor.template!.content).toBe(content)
|
||||
})
|
||||
|
||||
test('error tolerance', () => {
|
||||
@@ -102,6 +102,12 @@ h1 { color: red }
|
||||
expect(errors.length).toBe(1)
|
||||
})
|
||||
|
||||
test('treat custom blocks as raw text', () => {
|
||||
const { errors, descriptor } = parse(`<foo> <-& </foo>`)
|
||||
expect(errors.length).toBe(0)
|
||||
expect(descriptor.customBlocks[0].content).toBe(` <-& `)
|
||||
})
|
||||
|
||||
describe('warnings', () => {
|
||||
test('should only allow single template element', () => {
|
||||
parse(`<template><div/></template><template><div/></template>`)
|
||||
|
||||
@@ -2,7 +2,8 @@ import {
|
||||
NodeTypes,
|
||||
ElementNode,
|
||||
SourceLocation,
|
||||
CompilerError
|
||||
CompilerError,
|
||||
TextModes
|
||||
} from '@vue/compiler-core'
|
||||
import { RawSourceMap, SourceMapGenerator } from 'source-map'
|
||||
import LRUCache from 'lru-cache'
|
||||
@@ -89,6 +90,15 @@ export function parse(
|
||||
isNativeTag: () => true,
|
||||
// preserve all whitespaces
|
||||
isPreTag: () => true,
|
||||
getTextMode: (tag, _ns, parent) => {
|
||||
// all top level elements except <template> are parsed as raw text
|
||||
// containers
|
||||
if (!parent && tag !== 'template') {
|
||||
return TextModes.RAWTEXT
|
||||
} else {
|
||||
return TextModes.DATA
|
||||
}
|
||||
},
|
||||
onError: e => {
|
||||
errors.push(e)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user