aboutsummaryrefslogtreecommitdiff
path: root/node_modules/vue/src/compiler/create-compiler.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/vue/src/compiler/create-compiler.js')
-rw-r--r--node_modules/vue/src/compiler/create-compiler.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/node_modules/vue/src/compiler/create-compiler.js b/node_modules/vue/src/compiler/create-compiler.js
new file mode 100644
index 00000000..6671dcfe
--- /dev/null
+++ b/node_modules/vue/src/compiler/create-compiler.js
@@ -0,0 +1,55 @@
+/* @flow */
+
+import { extend } from 'shared/util'
+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 = []
+ const tips = []
+ finalOptions.warn = (msg, tip) => {
+ (tip ? tips : errors).push(msg)
+ }
+
+ if (options) {
+ // 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]
+ }
+ }
+ }
+
+ const compiled = baseCompile(template, finalOptions)
+ if (process.env.NODE_ENV !== 'production') {
+ errors.push.apply(errors, detectErrors(compiled.ast))
+ }
+ compiled.errors = errors
+ compiled.tips = tips
+ return compiled
+ }
+
+ return {
+ compile,
+ compileToFunctions: createCompileToFunctionFn(compile)
+ }
+ }
+}