From 40f72d5e50b389cb11b7ca13461aa2a75ddacdb4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Sun, 19 Nov 2023 11:20:05 +0800 Subject: [PATCH] feat(compiler-core): support specifying root namespace when parsing --- packages/compiler-core/src/ast.ts | 7 +- packages/compiler-core/src/options.ts | 31 ++++++++- packages/compiler-core/src/parser/index.ts | 3 +- packages/compiler-dom/__tests__/parse.spec.ts | 65 +++++++++++-------- packages/compiler-dom/src/parserOptions.ts | 32 ++++----- .../src/transforms/stringifyStatic.ts | 10 +-- 6 files changed, 92 insertions(+), 56 deletions(-) diff --git a/packages/compiler-core/src/ast.ts b/packages/compiler-core/src/ast.ts index cc581fff1..b7fb57158 100644 --- a/packages/compiler-core/src/ast.ts +++ b/packages/compiler-core/src/ast.ts @@ -16,12 +16,13 @@ import { PropsExpression } from './transforms/transformElement' import { ImportItem, TransformContext } from './transform' // Vue template is a platform-agnostic superset of HTML (syntax only). -// More namespaces like SVG and MathML are declared by platform specific -// compilers. +// More namespaces can be declared by platform specific compilers. export type Namespace = number export const enum Namespaces { - HTML + HTML, + SVG, + MATH_ML } export const enum NodeTypes { diff --git a/packages/compiler-core/src/options.ts b/packages/compiler-core/src/options.ts index a85842754..4b67ab0dd 100644 --- a/packages/compiler-core/src/options.ts +++ b/packages/compiler-core/src/options.ts @@ -1,4 +1,10 @@ -import { ElementNode, Namespace, TemplateChildNode, ParentNode } from './ast' +import { + ElementNode, + Namespace, + TemplateChildNode, + ParentNode, + Namespaces +} from './ast' import { CompilerError } from './errors' import { NodeTransform, @@ -16,7 +22,24 @@ export interface ErrorHandlingOptions { export interface ParserOptions extends ErrorHandlingOptions, CompilerCompatOptions { + /** + * Base mode is platform agnostic and only parses HTML-like template syntax, + * treating all tags the same way. Specific tag parsing behavior can be + * configured by higher-level compilers. + * + * HTML mode adds additional logic for handling special parsing behavior in + * `