refactor(compiler-vapor): fast path for string

This commit is contained in:
三咲智子 Kevin Deng 2024-01-30 22:17:34 +08:00
parent c0b7515369
commit 7f8a94b48e
No known key found for this signature in database
GPG Key ID: 69992F2250DFD93E
7 changed files with 24 additions and 21 deletions

View File

@ -56,9 +56,12 @@ export interface CodegenContext {
newline(): CodeFragment
multi(
codes: [left: string, right: string, segment: string],
...fn: Array<false | CodeFragment[]>
...fn: Array<false | string | CodeFragment[]>
): CodeFragment[]
call(
name: string,
...args: Array<false | string | CodeFragment[]>
): CodeFragment[]
call(name: string, ...args: Array<false | CodeFragment[]>): CodeFragment[]
withIndent<T>(fn: () => T): T
helpers: Set<string>
@ -116,8 +119,9 @@ function createCodegenContext(ir: RootIRNode, options: CodegenOptions) {
const frag: CodeFragment[] = []
fns = fns.filter(Boolean)
frag.push(left)
for (const [i, fn] of fns.entries()) {
for (let [i, fn] of fns.entries()) {
if (fn) {
if (isString(fn)) fn = [fn]
frag.push(...fn)
if (i < fns.length - 1) frag.push(seg)
}

View File

@ -16,9 +16,9 @@ export function genInsertNode(
newline(),
...call(
vaporHelper('insert'),
[element],
[`n${oper.parent}`],
[`n${oper.anchor}`],
element,
`n${oper.parent}`,
`n${oper.anchor}`,
),
]
}
@ -31,8 +31,8 @@ export function genPrependNode(
newline(),
...call(
vaporHelper('prepend'),
[`n${oper.parent}`],
...oper.elements.map(el => [`n${el}`]),
`n${oper.parent}`,
...oper.elements.map(el => `n${el}`),
),
]
}
@ -46,8 +46,8 @@ export function genAppendNode(
newline(),
...call(
vaporHelper('append'),
[`n${oper.parent}`],
...oper.elements.map(el => [`n${el}`]),
`n${oper.parent}`,
...oper.elements.map(el => `n${el}`),
),
]
}

View File

@ -16,13 +16,12 @@ export function genSetEvent(
const name = genName()
const handler = genFinalizedHandler()
const opt = !!options.length && [
`{ ${options.map(v => `${v}: true`).join(', ')} }`,
]
const opt =
!!options.length && `{ ${options.map(v => `${v}: true`).join(', ')} }`
return [
newline(),
...call(vaporHelper('on'), [`n${oper.element}`], name, handler, opt),
...call(vaporHelper('on'), `n${oper.element}`, name, handler, opt),
]
function genName(): CodeFragment[] {
@ -38,7 +37,7 @@ export function genSetEvent(
}
}
function genEventHandler(): CodeFragment[] {
function genEventHandler() {
const exp = oper.value
if (exp && exp.content.trim()) {
const isMemberExp = isMemberExpression(exp.content, ctxOptions)
@ -64,10 +63,10 @@ export function genSetEvent(
}
}
}
return ['() => {}']
return '() => {}'
}
function genFinalizedHandler(): CodeFragment[] {
function genFinalizedHandler() {
let expr = genEventHandler()
if (nonKeys.length) {

View File

@ -11,7 +11,7 @@ export function genSetHtml(
newline(),
...call(
vaporHelper('setHtml'),
[`n${oper.element}`],
`n${oper.element}`,
genExpression(oper.value, context),
),
]

View File

@ -19,7 +19,7 @@ export function genSetModelValue(
return [
newline(),
...call(vaporHelper('on'), [`n${oper.element}`], name, handler),
...call(vaporHelper('on'), `n${oper.element}`, name, handler),
]
function genName(): CodeFragment[] {

View File

@ -9,7 +9,7 @@ export function genSetProp(
): CodeFragment[] {
const { call, newline, vaporHelper, helper } = context
const element = [`n${oper.element}`]
const element = `n${oper.element}`
const expr = genExpression(oper.key, context)
// fast path for static props

View File

@ -11,7 +11,7 @@ export function genSetText(
newline(),
...call(
vaporHelper('setText'),
[`n${oper.element}`],
`n${oper.element}`,
genExpression(oper.value, context),
),
]