From 98bae0c4a9a6ff703e2258bcef980fc8b86d7ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90=20Kevin=20Deng?= Date: Sun, 7 Apr 2024 14:00:28 +0800 Subject: [PATCH] refactor(compiler-vapor): group directive --- .../compiler-vapor/src/generators/block.ts | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/packages/compiler-vapor/src/generators/block.ts b/packages/compiler-vapor/src/generators/block.ts index 979598bf0..e24e7961f 100644 --- a/packages/compiler-vapor/src/generators/block.ts +++ b/packages/compiler-vapor/src/generators/block.ts @@ -1,4 +1,9 @@ -import { type BlockIRNode, IRNodeTypes, type WithDirectiveIRNode } from '../ir' +import { + type BlockIRNode, + IRNodeTypes, + type OperationNode, + type WithDirectiveIRNode, +} from '../ir' import { type CodeFragment, INDENT_END, @@ -41,11 +46,7 @@ export function genBlockContent( push(...genChildren(child, context, child.id!)) } - const directiveOps = operation.filter( - (oper): oper is WithDirectiveIRNode => - oper.type === IRNodeTypes.WITH_DIRECTIVE, - ) - for (const directives of groupDirective(directiveOps)) { + for (const directives of groupDirective(operation)) { push(...genWithDirective(directives, context)) } @@ -67,9 +68,14 @@ export function genBlockContent( return frag } -function groupDirective(ops: WithDirectiveIRNode[]): WithDirectiveIRNode[][] { +function groupDirective(operation: OperationNode[]): WithDirectiveIRNode[][] { + const directiveOps = operation.filter( + (oper): oper is WithDirectiveIRNode => + oper.type === IRNodeTypes.WITH_DIRECTIVE, + ) + const directiveMap: Record = {} - for (const oper of ops) { + for (const oper of directiveOps) { if (!directiveMap[oper.element]) directiveMap[oper.element] = [] directiveMap[oper.element].push(oper) }