2
0
Эх сурвалжийг харах

refactor(runtime-vapor): drop array parent

三咲智子 Kevin Deng 2 жил өмнө
parent
commit
a87d2120e0

+ 30 - 93
packages/runtime-vapor/__tests__/dom.spec.ts

@@ -1,5 +1,5 @@
 import { append, insert, normalizeBlock, prepend, remove } from '../src/dom'
-import { type Fragment, type ParentBlock, fragmentKey } from '../src/render'
+import { fragmentKey } from '../src/render'
 
 const node1 = document.createTextNode('node1')
 const node2 = document.createTextNode('node2')
@@ -23,105 +23,42 @@ describe('dom', () => {
     ).toEqual([node1, node2, anchor, node3])
   })
 
-  describe('insert', () => {
-    test('parent is node', () => {
-      const container = document.createElement('div')
-      insert([anchor], container)
-      insert([node1], container)
-      insert([node2], container, anchor)
-      insert([], container, node3)
-      expect(Array.from(container.childNodes)).toEqual([node2, anchor, node1])
+  test('insert', () => {
+    const container = document.createElement('div')
+    insert([anchor], container)
+    insert([node1], container)
+    insert([node2], container, anchor)
+    insert([], container, node3)
+    expect(Array.from(container.childNodes)).toEqual([node2, anchor, node1])
 
-      expect(() => insert(node3, container, node3)).toThrowError(
-        'The child can not be found in the parent.',
-      )
-    })
-
-    test('parent is array', () => {
-      const container: Node[] = []
-      insert(anchor, container)
-      insert({ nodes: node1, [fragmentKey]: true }, container)
-      insert([node2], container, anchor)
-      expect(container).toEqual([
-        [node2],
-        anchor,
-        { nodes: node1, [fragmentKey]: true },
-      ])
-
-      expect(() => insert([], container, node3)).toThrowError(
-        'The child can not be found in the parent.',
-      )
-      expect(() => insert(node3, container, node3)).toThrowError(
-        'The child can not be found in the parent.',
-      )
-    })
+    expect(() => insert(node3, container, node3)).toThrowError(
+      'The child can not be found in the parent.',
+    )
   })
 
-  describe('prepend', () => {
-    test('parent is node', () => {
-      const container = document.createElement('div')
-      prepend(container, [node1], node2)
-      prepend(container, { nodes: node3, [fragmentKey]: true })
-      expect(Array.from(container.childNodes)).toEqual([node3, node1, node2])
-    })
-
-    test('parent is array', () => {
-      const container: Node[] = []
-      prepend(container, [node1], node2)
-      prepend(container, { nodes: node3, [fragmentKey]: true })
-      expect(container).toEqual([
-        { nodes: node3, [fragmentKey]: true },
-        [node1],
-        node2,
-      ])
-    })
+  test('prepend', () => {
+    const container = document.createElement('div')
+    prepend(container, [node1], node2)
+    prepend(container, { nodes: node3, [fragmentKey]: true })
+    expect(Array.from(container.childNodes)).toEqual([node3, node1, node2])
   })
 
-  describe('append', () => {
-    test('parent is node', () => {
-      const container = document.createElement('div')
-      append(container, [node1], node2)
-      append(container, { nodes: node3, [fragmentKey]: true })
-      expect(Array.from(container.childNodes)).toEqual([node1, node2, node3])
-    })
-
-    test('parent is array', () => {
-      const container: Node[] = []
-      append(container, [node1], node2)
-      append(container, { nodes: node3, [fragmentKey]: true })
-      expect(container).toEqual([
-        [node1],
-        node2,
-        { nodes: node3, [fragmentKey]: true },
-      ])
-    })
+  test('append', () => {
+    const container = document.createElement('div')
+    append(container, [node1], node2)
+    append(container, { nodes: node3, [fragmentKey]: true })
+    expect(Array.from(container.childNodes)).toEqual([node1, node2, node3])
   })
 
-  describe('remove', () => {
-    test('parent is node', () => {
-      const container = document.createElement('div')
-      container.append(node1, node2, node3)
-      remove([node1], container)
-      remove({ nodes: node3, [fragmentKey]: true }, container)
-      expect(Array.from(container.childNodes)).toEqual([node2])
-
-      expect(() => remove(anchor, container)).toThrowError(
-        'The node to be removed is not a child of this node.',
-      )
-    })
-
-    test('parent is array', () => {
-      const n1 = [node1]
-      const n3: Fragment = { nodes: node3, [fragmentKey]: true }
-      const container: ParentBlock = [n1, node2, n3]
-
-      remove(n1, container)
-      remove(n3, container)
-      expect(container).toEqual([node2])
+  test('remove', () => {
+    const container = document.createElement('div')
+    container.append(node1, node2, node3)
+    remove([node1], container)
+    remove({ nodes: node3, [fragmentKey]: true }, container)
+    expect(Array.from(container.childNodes)).toEqual([node2])
 
-      expect(() => remove(anchor, container)).toThrowError(
-        'The node to be removed is not a child of this node.',
-      )
-    })
+    expect(() => remove(anchor, container)).toThrowError(
+      'The node to be removed is not a child of this node.',
+    )
   })
 })

+ 9 - 34
packages/runtime-vapor/src/dom.ts

@@ -1,5 +1,5 @@
 import { isArray, toDisplayString } from '@vue/shared'
-import type { Block, ParentBlock } from './render'
+import type { Block } from './render'
 
 export * from './dom/style'
 export * from './dom/prop'
@@ -22,47 +22,22 @@ export function normalizeBlock(block: Block): Node[] {
 
 export function insert(
   block: Block,
-  parent: ParentBlock,
+  parent: ParentNode,
   anchor: Node | null = null,
 ) {
-  if (isArray(parent)) {
-    const index = anchor ? parent.indexOf(anchor) : -1
-    if (index > -1) {
-      parent.splice(index, 0, block)
-    } else {
-      if (anchor) throw new Error('The child can not be found in the parent.')
-      parent.push(block)
-    }
-  } else {
-    normalizeBlock(block).forEach(node => parent.insertBefore(node, anchor))
-  }
+  normalizeBlock(block).forEach(node => parent.insertBefore(node, anchor))
 }
 
-export function prepend(parent: ParentBlock, ...blocks: Block[]) {
-  if (isArray(parent)) {
-    parent.unshift(...blocks)
-  } else {
-    parent.prepend(...normalizeBlock(blocks))
-  }
+export function prepend(parent: ParentNode, ...blocks: Block[]) {
+  parent.prepend(...normalizeBlock(blocks))
 }
 
-export function append(parent: ParentBlock, ...blocks: Block[]) {
-  if (isArray(parent)) {
-    parent.push(...blocks)
-  } else {
-    parent.append(...normalizeBlock(blocks))
-  }
+export function append(parent: ParentNode, ...blocks: Block[]) {
+  parent.append(...normalizeBlock(blocks))
 }
 
-export function remove(block: Block, parent: ParentBlock) {
-  if (isArray(parent)) {
-    const index = parent.indexOf(block)
-    if (index === -1)
-      throw Error('The node to be removed is not a child of this node.')
-    parent.splice(index, 1)
-  } else {
-    normalizeBlock(block).forEach(node => parent.removeChild(node))
-  }
+export function remove(block: Block, parent: ParentNode) {
+  normalizeBlock(block).forEach(node => parent.removeChild(node))
 }
 
 /*! #__NO_SIDE_EFFECTS__ */

+ 0 - 1
packages/runtime-vapor/src/render.ts

@@ -21,7 +21,6 @@ import { queuePostRenderEffect } from './scheduler'
 export const fragmentKey = Symbol(__DEV__ ? `fragmentKey` : ``)
 
 export type Block = Node | Fragment | Block[]
-export type ParentBlock = ParentNode | Block[]
 export type Fragment = {
   nodes: Block
   anchor?: Node