Skip to content

Commit a20dd86

Browse files
committed
more efficient compiler module handling
1 parent a53d54a commit a20dd86

File tree

4 files changed

+37
-17
lines changed

4 files changed

+37
-17
lines changed

src/compiler/codegen.js

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
/* @flow */
22

33
import { genHandlers } from './events'
4-
import { baseWarn } from './helpers'
4+
import { baseWarn, pluckModuleFunction } from './helpers'
55
import baseDirectives from './directives/index'
66
import { no } from 'shared/util'
77

88
// configurable state
99
let warn
10-
let platformModules
10+
let transforms
11+
let dataGenFns
1112
let platformDirectives
1213
let isPlatformReservedTag
1314
let staticRenderFns
@@ -25,7 +26,8 @@ export function generate (
2526
const currentStaticRenderFns: Array<string> = staticRenderFns = []
2627
currentOptions = options
2728
warn = options.warn || baseWarn
28-
platformModules = options.modules || []
29+
transforms = pluckModuleFunction(options.modules, 'transformCode')
30+
dataGenFns = pluckModuleFunction(options.modules, 'genData')
2931
platformDirectives = options.directives || {}
3032
isPlatformReservedTag = options.isReservedTag || no
3133
const code = ast ? genElement(ast) : '_h(_e("div"))'
@@ -72,12 +74,9 @@ function genElement (el: ASTElement): string {
7274
code = `_m(${staticRenderFns.length - 1})`
7375
}
7476
}
75-
// platform modules
76-
for (let i = 0; i < platformModules.length; i++) {
77-
const transform = platformModules[i].transformCode
78-
if (transform) {
79-
code = transform(el, code)
80-
}
77+
// module transforms
78+
for (let i = 0; i < transforms.length; i++) {
79+
code = transforms[i](el, code)
8180
}
8281
// check keep-alive
8382
if (el.component && el.keepAlive) {
@@ -141,9 +140,9 @@ function genData (el: ASTElement): string | void {
141140
if (el.slotTarget) {
142141
data += `slot:${el.slotTarget},`
143142
}
144-
// platform modules
145-
for (let i = 0; i < platformModules.length; i++) {
146-
data += platformModules[i].genData(el)
143+
// module data generation functions
144+
for (let i = 0; i < dataGenFns.length; i++) {
145+
data += dataGenFns[i](el)
147146
}
148147
// v-show, used to avoid transition being applied
149148
// since v-show takes it over

src/compiler/helpers.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ export function baseWarn (msg: string) {
44
console.error(`[Vue parser]: ${msg}`)
55
}
66

7+
export function pluckModuleFunction (
8+
modules: ?Array<Object>,
9+
key: string
10+
): Array<Function> {
11+
return modules
12+
? modules.map(m => m[key]).filter(_ => _)
13+
: []
14+
}
15+
716
export function addProp (el: ASTElement, name: string, value: string) {
817
(el.props || (el.props = [])).push({ name, value })
918
}

src/compiler/parser/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { parseHTML } from './html-parser'
55
import { parseText } from './text-parser'
66
import { hyphenate, cached, no } from 'shared/util'
77
import {
8+
pluckModuleFunction,
89
getAndRemoveAttr,
910
addProp,
1011
addAttr,
@@ -30,7 +31,7 @@ const decodeHTMLCached = cached(decodeHTML)
3031
let warn
3132
let platformGetTagNamespace
3233
let platformMustUseProp
33-
let platformModules
34+
let transforms
3435
let delimiters
3536

3637
/**
@@ -43,7 +44,7 @@ export function parse (
4344
warn = options.warn || baseWarn
4445
platformGetTagNamespace = options.getTagNamespace || no
4546
platformMustUseProp = options.mustUseProp || no
46-
platformModules = options.modules || []
47+
transforms = pluckModuleFunction(options.modules, 'transformNode')
4748
delimiters = options.delimiters
4849
const stack = []
4950
let root
@@ -115,8 +116,8 @@ export function parse (
115116
processRender(element)
116117
processSlot(element)
117118
processComponent(element)
118-
for (let i = 0; i < platformModules.length; i++) {
119-
platformModules[i].transformNode(element, options)
119+
for (let i = 0; i < transforms.length; i++) {
120+
transforms[i](element, options)
120121
}
121122
processAttrs(element)
122123
}

src/entries/web-compiler.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { compile as baseCompile } from 'web/compiler/index'
1+
import { extend } from 'shared/util'
2+
import { compile as baseCompile, baseOptions } from 'web/compiler/index'
23
import { detectErrors } from 'compiler/error-detector'
34

45
export { parseSFC as parseComponent } from 'compiler/parser/sfc-parser'
@@ -8,8 +9,18 @@ export function compile (
89
template: string,
910
options?: Object
1011
): CompiledResult {
12+
options = options || {}
1113
const errors = []
14+
// allow injecting modules/directives
15+
const modules = options.modules
16+
? baseOptions.modules.concat(options.modules)
17+
: baseOptions.modules
18+
const directives = options.directives
19+
? extend(extend({}, baseOptions.directives), options.directives)
20+
: baseOptions.directives
1221
const compiled = baseCompile(template, {
22+
modules,
23+
directives,
1324
warn: msg => {
1425
errors.push(msg)
1526
}

0 commit comments

Comments
 (0)