all files / src/ elementToVNode.ts

45.45% Statements 5/11
50% Branches 3/6
33.33% Functions 1/3
45.45% Lines 5/11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33   54×                                                      
import { ElementVNode, MostlyVNode, VNode } from './'
 
export function elementToVNode<T extends Element>(element: T): ElementVNode<T> {
  return new MostlyVNode<T>(
    element.tagName && element.tagName.toLowerCase(),
    {
      id: element.id,
      className: element.className
    },
    Array.prototype.slice.call(element.childNodes).map(nodeToVNode) || undefined,
    element,
    undefined,
    undefined,
    undefined,
    undefined,
  ) as ElementVNode<T>
}
 
function nodeToVNode(node: Element | Text): VNode {
  if (isElement(node))
    return elementToVNode(node)
 
  const textVNode = MostlyVNode.createText(node.textContent as string)
 
  textVNode.element = node
 
  return textVNode as VNode
}
 
function isElement(node: Node): node is Element {
  return node.nodeType === 1
}