import { VNode } from 'vue' /* * Template compilation options / results */ interface CompilerOptions { modules?: ModuleOptions[] directives?: Record preserveWhitespace?: boolean whitespace?: 'preserve' | 'condense' outputSourceRange?: any } interface CompilerOptionsWithSourceRange extends CompilerOptions { outputSourceRange: true } interface ErrorWithRange { msg: string start: number end: number } interface CompiledResult { ast: ASTElement | undefined render: string staticRenderFns: string[] errors: ErrorType[] tips: ErrorType[] } interface CompiledResultFunctions { render: () => VNode staticRenderFns: (() => VNode)[] } interface ModuleOptions { preTransformNode: (el: ASTElement) => ASTElement | undefined transformNode: (el: ASTElement) => ASTElement | undefined postTransformNode: (el: ASTElement) => void genData: (el: ASTElement) => string transformCode?: (el: ASTElement, code: string) => string staticKeys?: string[] } type DirectiveFunction = (node: ASTElement, directiveMeta: ASTDirective) => void /* * AST Types */ /** * - 0: FALSE - whole sub tree un-optimizable * - 1: FULL - whole sub tree optimizable * - 2: SELF - self optimizable but has some un-optimizable children * - 3: CHILDREN - self un-optimizable but have fully optimizable children * - 4: PARTIAL - self un-optimizable with some un-optimizable children */ export type SSROptimizability = 0 | 1 | 2 | 3 | 4 export interface ASTModifiers { [key: string]: boolean } export interface ASTIfCondition { exp: string | undefined block: ASTElement } export interface ASTElementHandler { value: string params?: any[] modifiers: ASTModifiers | undefined } export interface ASTElementHandlers { [key: string]: ASTElementHandler | ASTElementHandler[] } export interface ASTDirective { name: string rawName: string value: string arg: string | undefined modifiers: ASTModifiers | undefined } export type ASTNode = ASTElement | ASTText | ASTExpression export interface ASTElement { type: 1 tag: string attrsList: { name: string; value: any }[] attrsMap: Record parent: ASTElement | undefined children: ASTNode[] processed?: true static?: boolean staticRoot?: boolean staticInFor?: boolean staticProcessed?: boolean hasBindings?: boolean text?: string attrs?: { name: string; value: any }[] props?: { name: string; value: string }[] plain?: boolean pre?: true ns?: string component?: string inlineTemplate?: true transitionMode?: string | null slotName?: string slotTarget?: string slotScope?: string scopedSlots?: Record ref?: string refInFor?: boolean if?: string ifProcessed?: boolean elseif?: string else?: true ifConditions?: ASTIfCondition[] for?: string forProcessed?: boolean key?: string alias?: string iterator1?: string iterator2?: string staticClass?: string classBinding?: string staticStyle?: string styleBinding?: string events?: ASTElementHandlers nativeEvents?: ASTElementHandlers transition?: string | true transitionOnAppear?: boolean model?: { value: string callback: string expression: string } directives?: ASTDirective[] forbidden?: true once?: true onceProcessed?: boolean wrapData?: (code: string) => string wrapListeners?: (code: string) => string // 2.4 ssr optimization ssrOptimizability?: SSROptimizability } export interface ASTExpression { type: 2 expression: string text: string tokens: (string | Record)[] static?: boolean // 2.4 ssr optimization ssrOptimizability?: SSROptimizability } export interface ASTText { type: 3 text: string static?: boolean isComment?: boolean // 2.4 ssr optimization ssrOptimizability?: SSROptimizability } /* * SFC parser related types */ interface SFCParserOptions { pad?: true | 'line' | 'space' deindent?: boolean } export interface SFCBlock { type: string content: string attrs: Record start?: number end?: number lang?: string src?: string scoped?: boolean module?: string | boolean } export interface SFCDescriptor { template: SFCBlock | undefined script: SFCBlock | undefined styles: SFCBlock[] customBlocks: SFCBlock[] } /* * Exposed functions */ export function compile( template: string, options: CompilerOptionsWithSourceRange ): CompiledResult export function compile( template: string, options?: CompilerOptions ): CompiledResult export function compileToFunctions(template: string): CompiledResultFunctions export function ssrCompile( template: string, options: CompilerOptionsWithSourceRange ): CompiledResult export function ssrCompile( template: string, options?: CompilerOptions ): CompiledResult export function ssrCompileToFunctions(template: string): CompiledResultFunctions export function parseComponent( file: string, options?: SFCParserOptions ): SFCDescriptor export function generateCodeFrame( template: string, start: number, end: number ): string