Parcourir la source

refactor: extract dynamicChildren

三咲智子 Kevin Deng il y a 2 ans
Parent
commit
c53af4d57d
1 fichiers modifiés avec 45 ajouts et 44 suppressions
  1. 45 44
      packages/compiler-vapor/src/transform.ts

+ 45 - 44
packages/compiler-vapor/src/transform.ts

@@ -169,54 +169,55 @@ function transformChildren(
   const childrenTemplate: string[] = []
   children.forEach((child, i) => walkNode(child, i))
 
-  let prevChildren: DynamicInfo[] = []
-  let hasStatic = false
-
-  for (let index = 0; index < children.length; index++) {
-    const child = ctx.dynamic.children[index]
-
-    if (!child || !child.ghost) {
-      if (prevChildren.length)
-        if (hasStatic) {
-          childrenTemplate[index - prevChildren.length] = `<!>`
-          const anchor = (prevChildren[0].placeholder = ctx.incraseId())
-
-          ctx.registerOpration({
-            type: IRNodeTypes.INSERT_NODE,
-            loc: ctx.node.loc,
-            element: prevChildren.map((child) => child.id!),
-            parent: ctx.reference(),
-            anchor,
-          })
-        } else {
-          ctx.registerOpration({
-            type: IRNodeTypes.PREPEND_NODE,
-            loc: ctx.node.loc,
-            elements: prevChildren.map((child) => child.id!),
-            parent: ctx.reference(),
-          })
-        }
-      hasStatic = true
-      prevChildren = []
-      continue
-    }
+  processDynamicChildren()
+  ctx.template += childrenTemplate.join('')
 
-    prevChildren.push(child)
+  if (root) ctx.registerTemplate()
 
-    if (index === children.length - 1) {
-      ctx.registerOpration({
-        type: IRNodeTypes.APPEND_NODE,
-        loc: ctx.node.loc,
-        elements: prevChildren.map((child) => child.id!),
-        parent: ctx.reference(),
-      })
-    }
-  }
+  function processDynamicChildren() {
+    let prevChildren: DynamicInfo[] = []
+    let hasStatic = false
+    for (let index = 0; index < children.length; index++) {
+      const child = ctx.dynamic.children[index]
+
+      if (!child || !child.ghost) {
+        if (prevChildren.length)
+          if (hasStatic) {
+            childrenTemplate[index - prevChildren.length] = `<!>`
+            const anchor = (prevChildren[0].placeholder = ctx.incraseId())
+
+            ctx.registerOpration({
+              type: IRNodeTypes.INSERT_NODE,
+              loc: ctx.node.loc,
+              element: prevChildren.map((child) => child.id!),
+              parent: ctx.reference(),
+              anchor,
+            })
+          } else {
+            ctx.registerOpration({
+              type: IRNodeTypes.PREPEND_NODE,
+              loc: ctx.node.loc,
+              elements: prevChildren.map((child) => child.id!),
+              parent: ctx.reference(),
+            })
+          }
+        hasStatic = true
+        prevChildren = []
+        continue
+      }
 
-  ctx.template += childrenTemplate.join('')
+      prevChildren.push(child)
 
-  // finalize template
-  if (root) ctx.registerTemplate()
+      if (index === children.length - 1) {
+        ctx.registerOpration({
+          type: IRNodeTypes.APPEND_NODE,
+          loc: ctx.node.loc,
+          elements: prevChildren.map((child) => child.id!),
+          parent: ctx.reference(),
+        })
+      }
+    }
+  }
 
   function walkNode(node: TemplateChildNode, index: number) {
     const child = createContext(node, ctx, index)