First commit
This commit is contained in:
83
node_modules/vue/src/compiler/create-compiler.ts
generated
vendored
Normal file
83
node_modules/vue/src/compiler/create-compiler.ts
generated
vendored
Normal file
@@ -0,0 +1,83 @@
|
||||
import { extend } from 'shared/util'
|
||||
import { CompilerOptions, CompiledResult, WarningMessage } from 'types/compiler'
|
||||
import { detectErrors } from './error-detector'
|
||||
import { createCompileToFunctionFn } from './to-function'
|
||||
|
||||
export function createCompilerCreator(baseCompile: Function): Function {
|
||||
return function createCompiler(baseOptions: CompilerOptions) {
|
||||
function compile(
|
||||
template: string,
|
||||
options?: CompilerOptions
|
||||
): CompiledResult {
|
||||
const finalOptions = Object.create(baseOptions)
|
||||
const errors: WarningMessage[] = []
|
||||
const tips: WarningMessage[] = []
|
||||
|
||||
let warn = (
|
||||
msg: WarningMessage,
|
||||
range: { start: number; end: number },
|
||||
tip: string
|
||||
) => {
|
||||
;(tip ? tips : errors).push(msg)
|
||||
}
|
||||
|
||||
if (options) {
|
||||
if (__DEV__ && options.outputSourceRange) {
|
||||
// $flow-disable-line
|
||||
const leadingSpaceLength = template.match(/^\s*/)![0].length
|
||||
|
||||
warn = (
|
||||
msg: WarningMessage | string,
|
||||
range: { start: number; end: number },
|
||||
tip: string
|
||||
) => {
|
||||
const data: WarningMessage = typeof msg === 'string' ? { msg } : msg
|
||||
if (range) {
|
||||
if (range.start != null) {
|
||||
data.start = range.start + leadingSpaceLength
|
||||
}
|
||||
if (range.end != null) {
|
||||
data.end = range.end + leadingSpaceLength
|
||||
}
|
||||
}
|
||||
;(tip ? tips : errors).push(data)
|
||||
}
|
||||
}
|
||||
// merge custom modules
|
||||
if (options.modules) {
|
||||
finalOptions.modules = (baseOptions.modules || []).concat(
|
||||
options.modules
|
||||
)
|
||||
}
|
||||
// merge custom directives
|
||||
if (options.directives) {
|
||||
finalOptions.directives = extend(
|
||||
Object.create(baseOptions.directives || null),
|
||||
options.directives
|
||||
)
|
||||
}
|
||||
// copy other options
|
||||
for (const key in options) {
|
||||
if (key !== 'modules' && key !== 'directives') {
|
||||
finalOptions[key] = options[key as keyof CompilerOptions]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
finalOptions.warn = warn
|
||||
|
||||
const compiled = baseCompile(template.trim(), finalOptions)
|
||||
if (__DEV__) {
|
||||
detectErrors(compiled.ast, warn)
|
||||
}
|
||||
compiled.errors = errors
|
||||
compiled.tips = tips
|
||||
return compiled
|
||||
}
|
||||
|
||||
return {
|
||||
compile,
|
||||
compileToFunctions: createCompileToFunctionFn(compile)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user