mirror of https://github.com/vuejs/core.git
feat(compiler-sfc): support passing template parsing options when parsing sfc
- This is released in a patch because it is an relatively internal API but required to properly fix https://github.com/vitejs/vite-plugin-vue/issues/322 - `parseExpressions` is now deprecated because it can be passed using original template parsing options (`prefixIdentifiers`)
This commit is contained in:
parent
a9be936acf
commit
6fab8551e4
|
|
@ -1,5 +1,10 @@
|
|||
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', () => {
|
||||
|
|
@ -350,6 +355,20 @@ h1 { color: red }
|
|||
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)
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import {
|
|||
type CompilerError,
|
||||
type ElementNode,
|
||||
NodeTypes,
|
||||
type ParserOptions,
|
||||
type RootNode,
|
||||
type SourceLocation,
|
||||
createRoot,
|
||||
|
|
@ -24,6 +25,11 @@ export interface SFCParseOptions {
|
|||
pad?: boolean | 'line' | 'space'
|
||||
ignoreEmpty?: boolean
|
||||
compiler?: TemplateCompiler
|
||||
templateParseOptions?: ParserOptions
|
||||
/**
|
||||
* TODO remove in 3.5
|
||||
* @deprecated use `templateParseOptions: { prefixIdentifiers: false }` instead
|
||||
*/
|
||||
parseExpressions?: boolean
|
||||
}
|
||||
|
||||
|
|
@ -106,6 +112,7 @@ export function parse(
|
|||
pad = false,
|
||||
ignoreEmpty = true,
|
||||
compiler = CompilerDOM,
|
||||
templateParseOptions = {},
|
||||
parseExpressions = true,
|
||||
}: SFCParseOptions = {},
|
||||
): SFCParseResult {
|
||||
|
|
@ -133,6 +140,7 @@ export function parse(
|
|||
const ast = compiler.parse(source, {
|
||||
parseMode: 'sfc',
|
||||
prefixIdentifiers: parseExpressions,
|
||||
...templateParseOptions,
|
||||
onError: e => {
|
||||
errors.push(e)
|
||||
},
|
||||
|
|
|
|||
Loading…
Reference in New Issue