From 9e757b5cc5baab30842ab314ee20d728b466cdbc Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 13 Dec 2019 13:22:15 -0500 Subject: [PATCH] refactor(compiler-core): move compile into separate file --- packages/compiler-core/src/codegen.ts | 15 +++--- packages/compiler-core/src/compile.ts | 74 ++++++++++++++++++++++++++ packages/compiler-core/src/index.ts | 75 +-------------------------- 3 files changed, 81 insertions(+), 83 deletions(-) create mode 100644 packages/compiler-core/src/compile.ts diff --git a/packages/compiler-core/src/codegen.ts b/packages/compiler-core/src/codegen.ts index 939a07f8eb..dee28eebfa 100644 --- a/packages/compiler-core/src/codegen.ts +++ b/packages/compiler-core/src/codegen.ts @@ -84,13 +84,7 @@ function createCodegenContext( line: 1, offset: 0, indentLevel: 0, - - // lazy require source-map implementation, only in non-browser builds! - map: - __BROWSER__ || !sourceMap - ? undefined - : new (loadDep('source-map')).SourceMapGenerator(), - + map: undefined, helper(key) { const name = helperNameMap[key] return prefixIdentifiers ? name : `_${name}` @@ -148,9 +142,12 @@ function createCodegenContext( }) } - if (!__BROWSER__ && context.map) { - context.map.setSourceContent(filename, context.source) + if (!__BROWSER__ && sourceMap) { + // lazy require source-map implementation, only in non-browser builds + context.map = new (loadDep('source-map')).SourceMapGenerator() + context.map!.setSourceContent(filename, context.source) } + return context } diff --git a/packages/compiler-core/src/compile.ts b/packages/compiler-core/src/compile.ts new file mode 100644 index 0000000000..0ff53166ea --- /dev/null +++ b/packages/compiler-core/src/compile.ts @@ -0,0 +1,74 @@ +import { CompilerOptions } from './options' +import { parse } from './parse' +import { transform } from './transform' +import { generate, CodegenResult } from './codegen' +import { RootNode } from './ast' +import { isString } from '@vue/shared' +import { transformIf } from './transforms/vIf' +import { transformFor } from './transforms/vFor' +import { transformExpression } from './transforms/transformExpression' +import { transformSlotOutlet } from './transforms/transformSlotOutlet' +import { transformElement } from './transforms/transformElement' +import { transformOn } from './transforms/vOn' +import { transformBind } from './transforms/vBind' +import { trackSlotScopes, trackVForSlotScopes } from './transforms/vSlot' +import { transformText } from './transforms/transformText' +import { transformOnce } from './transforms/vOnce' +import { transformModel } from './transforms/vModel' +import { defaultOnError, createCompilerError, ErrorCodes } from './errors' + +// we name it `baseCompile` so that higher order compilers like @vue/compiler-dom +// can export `compile` while re-exporting everything else. +export function baseCompile( + template: string | RootNode, + options: CompilerOptions = {} +): CodegenResult { + /* istanbul ignore if */ + if (__BROWSER__) { + const onError = options.onError || defaultOnError + if (options.prefixIdentifiers === true) { + onError(createCompilerError(ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED)) + } else if (options.mode === 'module') { + onError(createCompilerError(ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED)) + } + } + + const ast = isString(template) ? parse(template, options) : template + + const prefixIdentifiers = + !__BROWSER__ && + (options.prefixIdentifiers === true || options.mode === 'module') + + transform(ast, { + ...options, + prefixIdentifiers, + nodeTransforms: [ + transformOnce, + transformIf, + transformFor, + ...(prefixIdentifiers + ? [ + // order is important + trackVForSlotScopes, + transformExpression + ] + : []), + transformSlotOutlet, + transformElement, + trackSlotScopes, + transformText, + ...(options.nodeTransforms || []) // user transforms + ], + directiveTransforms: { + on: transformOn, + bind: transformBind, + model: transformModel, + ...(options.directiveTransforms || {}) // user transforms + } + }) + + return generate(ast, { + ...options, + prefixIdentifiers + }) +} diff --git a/packages/compiler-core/src/index.ts b/packages/compiler-core/src/index.ts index d5ce029779..723fe8c3b2 100644 --- a/packages/compiler-core/src/index.ts +++ b/packages/compiler-core/src/index.ts @@ -1,77 +1,4 @@ -import { CompilerOptions } from './options' -import { parse } from './parse' -import { transform } from './transform' -import { generate, CodegenResult } from './codegen' -import { RootNode } from './ast' -import { isString } from '@vue/shared' -import { transformIf } from './transforms/vIf' -import { transformFor } from './transforms/vFor' -import { transformExpression } from './transforms/transformExpression' -import { transformSlotOutlet } from './transforms/transformSlotOutlet' -import { transformElement } from './transforms/transformElement' -import { transformOn } from './transforms/vOn' -import { transformBind } from './transforms/vBind' -import { defaultOnError, createCompilerError, ErrorCodes } from './errors' -import { trackSlotScopes, trackVForSlotScopes } from './transforms/vSlot' -import { transformText } from './transforms/transformText' -import { transformOnce } from './transforms/vOnce' -import { transformModel } from './transforms/vModel' - -// we name it `baseCompile` so that higher order compilers like @vue/compiler-dom -// can export `compile` while re-exporting everything else. -export function baseCompile( - template: string | RootNode, - options: CompilerOptions = {} -): CodegenResult { - /* istanbul ignore if */ - if (__BROWSER__) { - const onError = options.onError || defaultOnError - if (options.prefixIdentifiers === true) { - onError(createCompilerError(ErrorCodes.X_PREFIX_ID_NOT_SUPPORTED)) - } else if (options.mode === 'module') { - onError(createCompilerError(ErrorCodes.X_MODULE_MODE_NOT_SUPPORTED)) - } - } - - const ast = isString(template) ? parse(template, options) : template - - const prefixIdentifiers = - !__BROWSER__ && - (options.prefixIdentifiers === true || options.mode === 'module') - - transform(ast, { - ...options, - prefixIdentifiers, - nodeTransforms: [ - transformOnce, - transformIf, - transformFor, - ...(prefixIdentifiers - ? [ - // order is important - trackVForSlotScopes, - transformExpression - ] - : []), - transformSlotOutlet, - transformElement, - trackSlotScopes, - transformText, - ...(options.nodeTransforms || []) // user transforms - ], - directiveTransforms: { - on: transformOn, - bind: transformBind, - model: transformModel, - ...(options.directiveTransforms || {}) // user transforms - } - }) - - return generate(ast, { - ...options, - prefixIdentifiers - }) -} +export { baseCompile } from './compile' // Also expose lower level APIs & types export { -- 2.47.3