vue
Version:
Reactive, component-oriented view layer for modern web interfaces.
208 lines (176 loc) • 5.65 kB
text/typescript
import { BindingMetadata } from 'sfc/types'
export type CompilerOptions = {
warn?: Function // allow customizing warning in different environments; e.g. node
modules?: Array<ModuleOptions> // platform specific modules; e.g. style; class
directives?: { [key: string]: Function } // platform specific directives
staticKeys?: string // a list of AST properties to be considered static; for optimization
isUnaryTag?: (tag: string) => boolean | undefined // check if a tag is unary for the platform
canBeLeftOpenTag?: (tag: string) => boolean | undefined // check if a tag can be left opened
isReservedTag?: (tag: string) => boolean | undefined // check if a tag is a native for the platform
preserveWhitespace?: boolean // preserve whitespace between elements? (Deprecated)
whitespace?: 'preserve' | 'condense' // whitespace handling strategy
optimize?: boolean // optimize static content?
// web specific
mustUseProp?: (tag: string, type: string | null, name: string) => boolean // check if an attribute should be bound as a property
isPreTag?: (attr: string) => boolean | null // check if a tag needs to preserve whitespace
getTagNamespace?: (tag: string) => string | undefined // check the namespace for a tag
expectHTML?: boolean // only false for non-web builds
isFromDOM?: boolean
shouldDecodeTags?: boolean
shouldDecodeNewlines?: boolean
shouldDecodeNewlinesForHref?: boolean
outputSourceRange?: boolean
shouldKeepComment?: boolean
// runtime user-configurable
delimiters?: [string, string] // template delimiters
comments?: boolean // preserve comments in template
// for ssr optimization compiler
scopeId?: string
// SFC analyzed script bindings from `compileScript()`
bindings?: BindingMetadata
}
export type WarningMessage = {
msg: string
start?: number
end?: number
}
export type CompiledResult = {
ast: ASTElement | null
render: string
staticRenderFns: Array<string>
stringRenderFns?: Array<string>
errors?: Array<string | WarningMessage>
tips?: Array<string | WarningMessage>
}
export type ModuleOptions = {
// transform an AST node before any attributes are processed
// returning an ASTElement from pre/transforms replaces the element
preTransformNode?: (el: ASTElement) => ASTElement | null | void
// transform an AST node after built-ins like v-if, v-for are processed
transformNode?: (el: ASTElement) => ASTElement | null | void
// transform an AST node after its children have been processed
// cannot return replacement in postTransform because tree is already finalized
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<string> // AST properties to be considered static
}
export type ASTModifiers = { [key: string]: boolean }
export type ASTIfCondition = { exp: string | null; block: ASTElement }
export type ASTIfConditions = Array<ASTIfCondition>
export type ASTAttr = {
name: string
value: any
dynamic?: boolean
start?: number
end?: number
}
export type ASTElementHandler = {
value: string
params?: Array<any>
modifiers: ASTModifiers | null
dynamic?: boolean
start?: number
end?: number
}
export type ASTElementHandlers = {
[key: string]: ASTElementHandler | Array<ASTElementHandler>
}
export type ASTDirective = {
name: string
rawName: string
value: string
arg: string | null
isDynamicArg: boolean
modifiers: ASTModifiers | null
start?: number
end?: number
}
export type ASTNode = ASTElement | ASTText | ASTExpression
export type ASTElement = {
type: 1
tag: string
attrsList: Array<ASTAttr>
attrsMap: { [key: string]: any }
rawAttrsMap: { [key: string]: ASTAttr }
parent: ASTElement | void
children: Array<ASTNode>
start?: number
end?: number
processed?: true
static?: boolean
staticRoot?: boolean
staticInFor?: boolean
staticProcessed?: boolean
hasBindings?: boolean
text?: string
attrs?: Array<ASTAttr>
dynamicAttrs?: Array<ASTAttr>
props?: Array<ASTAttr>
plain?: boolean
pre?: true
ns?: string
component?: string
inlineTemplate?: true
transitionMode?: string | null
slotName?: string | null
slotTarget?: string | null
slotTargetDynamic?: boolean
slotScope?: string | null
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<ASTDirective>
forbidden?: true
once?: true
onceProcessed?: boolean
wrapData?: (code: string) => string
wrapListeners?: (code: string) => string
// 2.4 ssr optimization
ssrOptimizability?: number
}
export type ASTExpression = {
type: 2
expression: string
text: string
tokens: Array<string | Object>
static?: boolean
// 2.4 ssr optimization
ssrOptimizability?: number
start?: number
end?: number
}
export type ASTText = {
type: 3
text: string
static?: boolean
isComment?: boolean
// 2.4 ssr optimization
ssrOptimizability?: number
start?: number
end?: number
}