import { parse } from '../src'
-import { baseCompile, createRoot } from '@vue/compiler-core'
+import {
+ ElementTypes,
+ NodeTypes,
+ baseCompile,
+ createRoot,
+} from '@vue/compiler-core'
import { SourceMapConsumer } from 'source-map-js'
describe('compiler:sfc', () => {
expect(descriptor.customBlocks[0].content).toBe(` <-& `)
})
+ test('should accept parser options', () => {
+ const { errors, descriptor } = parse(`<template><hello/></template>`, {
+ templateParseOptions: {
+ isCustomElement: t => t === 'hello',
+ },
+ })
+ expect(errors.length).toBe(0)
+ expect(descriptor.template!.ast!.children[0]).toMatchObject({
+ type: NodeTypes.ELEMENT,
+ tag: 'hello',
+ tagType: ElementTypes.ELEMENT,
+ })
+ })
+
describe('warnings', () => {
function assertWarning(errors: Error[], msg: string) {
expect(errors.some(e => e.message.match(msg))).toBe(true)
type CompilerError,
type ElementNode,
NodeTypes,
+ type ParserOptions,
type RootNode,
type SourceLocation,
createRoot,
pad?: boolean | 'line' | 'space'
ignoreEmpty?: boolean
compiler?: TemplateCompiler
+ templateParseOptions?: ParserOptions
+ /**
+ * TODO remove in 3.5
+ * @deprecated use `templateParseOptions: { prefixIdentifiers: false }` instead
+ */
parseExpressions?: boolean
}
pad = false,
ignoreEmpty = true,
compiler = CompilerDOM,
+ templateParseOptions = {},
parseExpressions = true,
}: SFCParseOptions = {},
): SFCParseResult {
const ast = compiler.parse(source, {
parseMode: 'sfc',
prefixIdentifiers: parseExpressions,
+ ...templateParseOptions,
onError: e => {
errors.push(e)
},