]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
refactor(runtime-vapor): re-organize block
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Fri, 15 Nov 2024 18:24:42 +0000 (02:24 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Fri, 15 Nov 2024 18:24:42 +0000 (02:24 +0800)
packages/runtime-vapor/src/apiCreateComponent.ts
packages/runtime-vapor/src/apiCreateFor.ts
packages/runtime-vapor/src/apiCreateIf.ts
packages/runtime-vapor/src/apiRender.ts
packages/runtime-vapor/src/block.ts [new file with mode: 0644]
packages/runtime-vapor/src/component.ts
packages/runtime-vapor/src/componentSlots.ts
packages/runtime-vapor/src/directives.ts
packages/runtime-vapor/src/dom/element.ts

index 0d81b41ac9bd1ceda9f50e04f2915bcfe79ab259..8f19e6b3286302f48677dc0ee706790ec89db884 100644 (file)
@@ -15,9 +15,9 @@ import { type RawSlots, isDynamicSlotFn } from './componentSlots'
 import { withAttrs } from './componentAttrs'
 import { isString } from '@vue/shared'
 import { renderEffect } from './renderEffect'
-import { normalizeBlock } from './dom/element'
 import { setClass, setDynamicProp } from './dom/prop'
 import { setStyle } from './dom/style'
+import { normalizeBlock } from './block'
 
 export function createComponent(
   comp: Component | string,
index 8fcddf3174371332bf601fe051f61391cf138601..e8dcdb598c7976dcbf8bbf6e5f6e3524eb770403 100644 (file)
@@ -11,7 +11,7 @@ import {
   insert,
   remove as removeBlock,
 } from './dom/element'
-import { type Block, type Fragment, fragmentKey } from './apiRender'
+import { type Block, type Fragment, fragmentKey } from './block'
 import { warn } from './warning'
 import { currentInstance } from './component'
 import { componentKey } from './component'
index 63d733b20609197e1df54abe5f45a1c8821d65b8..7f9de1abff0d203eb0b65a5431f3371a690a0ba9 100644 (file)
@@ -1,5 +1,5 @@
 import { renderEffect } from './renderEffect'
-import { type Block, type Fragment, fragmentKey } from './apiRender'
+import { type Block, type Fragment, fragmentKey } from './block'
 import { type EffectScope, effectScope, shallowReactive } from '@vue/reactivity'
 import { createComment, createTextNode, insert, remove } from './dom/element'
 
index f173964ba8d63fa39c0afd04606fe8aba7f081ec..dc661fb2e69f931f71aef65446b3bcde04ae7821 100644 (file)
@@ -20,15 +20,7 @@ import { VaporErrorCodes, callWithErrorHandling } from './errorHandling'
 import { endMeasure, startMeasure } from './profiling'
 import { devtoolsComponentAdded } from './devtools'
 import { fallThroughAttrs } from './componentAttrs'
-
-export const fragmentKey: unique symbol = Symbol(__DEV__ ? `fragmentKey` : ``)
-
-export type Block = Node | Fragment | ComponentInternalInstance | Block[]
-export type Fragment = {
-  nodes: Block
-  anchor?: Node
-  [fragmentKey]: true
-}
+import { type Block, findFirstRootElement, fragmentKey } from './block'
 
 export function setupComponent(instance: ComponentInternalInstance): void {
   if (__DEV__) {
@@ -176,20 +168,3 @@ export function unmountComponent(instance: ComponentInternalInstance): void {
   )
   flushPostFlushCbs()
 }
-
-function findFirstRootElement(instance: ComponentInternalInstance) {
-  const element = getFirstNode(instance.block)
-  return element instanceof Element ? element : undefined
-}
-
-function getFirstNode(block: Block | null): Node | undefined {
-  if (!block || componentKey in block) return
-  if (block instanceof Node) return block
-  if (isArray(block)) {
-    if (block.length === 1) {
-      return getFirstNode(block[0])
-    }
-  } else {
-    return getFirstNode(block.nodes)
-  }
-}
diff --git a/packages/runtime-vapor/src/block.ts b/packages/runtime-vapor/src/block.ts
new file mode 100644 (file)
index 0000000..f8612a1
--- /dev/null
@@ -0,0 +1,52 @@
+import { isArray } from '@vue/shared'
+import { type ComponentInternalInstance, componentKey } from './component'
+
+export const fragmentKey: unique symbol = Symbol(__DEV__ ? `fragmentKey` : ``)
+
+export type Block = Node | Fragment | ComponentInternalInstance | Block[]
+export type Fragment = {
+  nodes: Block
+  anchor?: Node
+  [fragmentKey]: true
+}
+
+/*! #__NO_SIDE_EFFECTS__ */
+export function normalizeBlock(block: Block): Node[] {
+  const nodes: Node[] = []
+  if (block instanceof Node) {
+    nodes.push(block)
+  } else if (isArray(block)) {
+    block.forEach(child => nodes.push(...normalizeBlock(child)))
+  } else if (componentKey in block) {
+    nodes.push(...normalizeBlock(block.block!))
+  } else if (block) {
+    nodes.push(...normalizeBlock(block.nodes))
+    block.anchor && nodes.push(block.anchor)
+  }
+  return nodes
+}
+
+export function findFirstRootElement(
+  instance: ComponentInternalInstance,
+): Element | undefined {
+  const element = getFirstNode(instance.block)
+  return element instanceof Element ? element : undefined
+}
+
+export function getFirstNode(block: Block | null): Node | undefined {
+  if (!block || componentKey in block) return
+  if (block instanceof Node) return block
+  if (isArray(block)) {
+    if (block.length === 1) {
+      return getFirstNode(block[0])
+    }
+  } else {
+    return getFirstNode(block.nodes)
+  }
+}
+
+export function isValidBlock(block: Block): boolean {
+  return (
+    normalizeBlock(block).filter(node => !(node instanceof Comment)).length > 0
+  )
+}
index 9c36c84f538d7c3b12e20222ea434e29ce81cf4d..788108bde75499e11f6bb40d337d78e4c40783cf 100644 (file)
@@ -6,7 +6,7 @@ import {
   isBuiltInTag,
   isFunction,
 } from '@vue/shared'
-import type { Block } from './apiRender'
+import type { Block } from './block'
 import {
   type ComponentPropsOptions,
   type NormalizedPropsOptions,
index 0d321526f9b649fd0ad16268f83547725b921fbf..b18201e5727f6255014ca9979171852353a49b61 100644 (file)
@@ -11,15 +11,9 @@ import {
   currentInstance,
   setCurrentInstance,
 } from './component'
-import { type Block, type Fragment, fragmentKey } from './apiRender'
+import { type Block, type Fragment, fragmentKey, isValidBlock } from './block'
 import { firstEffect, renderEffect } from './renderEffect'
-import {
-  createComment,
-  createTextNode,
-  insert,
-  normalizeBlock,
-  remove,
-} from './dom/element'
+import { createComment, createTextNode, insert, remove } from './dom/element'
 import type { NormalizedRawProps } from './componentProps'
 import type { Data } from '@vue/runtime-shared'
 import { mergeProps } from './dom/prop'
@@ -271,9 +265,3 @@ function normalizeSlotProps(rawPropsList: NormalizedRawProps) {
     }
   }
 }
-
-function isValidBlock(block: Block) {
-  return (
-    normalizeBlock(block).filter(node => !(node instanceof Comment)).length > 0
-  )
-}
index 58eeb7a0480a2be79b5d70df4d4fdd1fc4557152..9534d04482946454580d011353f45bfef20e6f33 100644 (file)
@@ -5,7 +5,7 @@ import {
   isVaporComponent,
 } from './component'
 import { warn } from './warning'
-import { normalizeBlock } from './dom/element'
+import { normalizeBlock } from './block'
 import { getCurrentScope } from '@vue/reactivity'
 import { VaporErrorCodes, callWithAsyncErrorHandling } from './errorHandling'
 
index 852feeac0ce8483b5b93ff5fc83242fe23a7b466..e3bd9ee5b24f86a22dbb32be9837b15246c10e5d 100644 (file)
@@ -1,24 +1,7 @@
 import { isArray } from '@vue/shared'
-import type { Block } from '../apiRender'
-import { componentKey } from '../component'
 import { renderEffect } from '../renderEffect'
 import { setText } from './prop'
-
-/*! #__NO_SIDE_EFFECTS__ */
-export function normalizeBlock(block: Block): Node[] {
-  const nodes: Node[] = []
-  if (block instanceof Node) {
-    nodes.push(block)
-  } else if (isArray(block)) {
-    block.forEach(child => nodes.push(...normalizeBlock(child)))
-  } else if (componentKey in block) {
-    nodes.push(...normalizeBlock(block.block!))
-  } else if (block) {
-    nodes.push(...normalizeBlock(block.nodes))
-    block.anchor && nodes.push(block.anchor)
-  }
-  return nodes
-}
+import { type Block, normalizeBlock } from '../block'
 
 export function insert(
   block: Block,