code: function vnode(node, parent, depth, indexInParent, type) {
    type = type || getType(node);
    let name, key, value;
  
    if (type == 2) {
      name = node[reservedNameKey];
      value = node[reservedValueKeys[2]]; // this ensures pairs are iterated as their values (if no $key use attr node for construction)
  
      if (node.$key) {
        key = node.$key;
        node = value;
        type = getType(node);
      }
    }
  
    if ((0, _type.isBranch)(type)) {
      name = node[reservedNameKey];
    } else if (type == 3 || type == 12) {
      value = node;
    } else {
      value = node[reservedValueKeys[type]];
    }
  
    return new _vnode.VNode(cx, node, type, name, key, value, parent, depth, indexInParent);
  }
docs: [vnode description]
  @param  {any} node          [description]
  @param  {VNode} parent        [description]
  @param  {Number} depth         [description]
  @param  {Number} indexInParent [description]
  @param  {Number} type          [description]
  @return {VNode}               [description]