declare type CompilerOptions = { warn?: Function; // allow customizing warning in different environments; e.g. node expectHTML?: boolean; // only false for non-web builds modules?: Array; // platform specific modules; e.g. style; class staticKeys?: string; // a list of AST properties to be considered static; for optimization directives?: { [key: string]: Function }; // platform specific directives isUnaryTag?: (tag: string) => ?boolean; // check if a tag is unary for the platform canBeLeftOpenTag?: (tag: string) => ?boolean; // check if a tag can be left opened isReservedTag?: (tag: string) => ?boolean; // check if a tag is a native for the platform mustUseProp?: (tag: string, type: ?string, name: string) => boolean; // check if an attribute should be bound as a property isPreTag?: (attr: string) => ?boolean; // check if a tag needs to preserve whitespace getTagNamespace?: (tag: string) => ?string; // check the namespace for a tag transforms?: Array; // a list of transforms on parsed AST before codegen preserveWhitespace?: boolean; isFromDOM?: boolean; shouldDecodeTags?: boolean; shouldDecodeNewlines?: boolean; // for ssr optimization compiler scopeId?: string; // runtime user-configurable delimiters?: [string, string]; // template delimiters // allow user kept comments comments?: boolean }; declare type CompiledResult = { ast: ?ASTElement; render: string; staticRenderFns: Array; stringRenderFns?: Array; errors?: Array; tips?: Array; }; declare type ModuleOptions = { preTransformNode: (el: ASTElement) => void; transformNode: (el: ASTElement) => void; // transform an element's AST node postTransformNode: (el: ASTElement) => void; genData: (el: ASTElement) => string; // generate extra data string for an element transformCode?: (el: ASTElement, code: string) => string; // further transform generated code for an element staticKeys?: Array; // AST properties to be considered static }; declare type ASTModifiers = { [key: string]: boolean }; declare type ASTIfConditions = Array<{ exp: ?string; block: ASTElement }>; declare type ASTElementHandler = { value: string; modifiers: ?ASTModifiers; }; declare type ASTElementHandlers = { [key: string]: ASTElementHandler | Array; }; declare type ASTDirective = { name: string; rawName: string; value: string; arg: ?string; modifiers: ?ASTModifiers; }; declare type ASTNode = ASTElement | ASTText | ASTExpression; declare type ASTElement = { type: 1; tag: string; attrsList: Array<{ name: string; value: string }>; attrsMap: { [key: string]: string | null }; parent: ASTElement | void; children: Array; static?: boolean; staticRoot?: boolean; staticInFor?: boolean; staticProcessed?: boolean; hasBindings?: boolean; text?: string; attrs?: Array<{ name: string; value: string }>; props?: Array<{ name: string; value: string }>; plain?: boolean; pre?: true; ns?: string; component?: string; inlineTemplate?: true; transitionMode?: string | null; slotName?: ?string; slotTarget?: ?string; slotScope?: ?string; scopedSlots?: { [name: string]: ASTElement }; ref?: string; refInFor?: boolean; if?: string; ifProcessed?: boolean; elseif?: string; else?: true; ifConditions?: ASTIfConditions; 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?: Array; forbidden?: true; once?: true; onceProcessed?: boolean; wrapData?: (code: string) => string; wrapListeners?: (code: string) => string; // 2.4 ssr optimization ssrOptimizability?: number; // weex specific appendAsTree?: boolean; }; declare type ASTExpression = { type: 2; expression: string; text: string; static?: boolean; // 2.4 ssr optimization ssrOptimizability?: number; }; declare type ASTText = { type: 3; text: string; static?: boolean; isComment?: boolean; // 2.4 ssr optimization ssrOptimizability?: number; }; // SFC-parser related declarations // an object format describing a single-file component. declare type SFCDescriptor = { template: ?SFCBlock; script: ?SFCBlock; styles: Array; customBlocks: Array; } declare type SFCCustomBlock = { type: string; content: string; start?: number; end?: number; src?: string; attrs: {[attribute:string]: string}; }; declare type SFCBlock = { type: string; content: string; start?: number; end?: number; lang?: string; src?: string; scoped?: boolean; module?: string | boolean; };