'use strict';
exports.__esModule = true;
exports.isSameNodeType = isSameNodeType;
exports.isNamedNode = isNamedNode;
exports.getNodeProps = getNodeProps;
var _util = require('../util');
var _functionalComponent = require('./functional-component');
var _dom = require('../dom');
/** Check if two nodes are equivalent.
* @param {Element} node
* @param {VNode} vnode
* @private
*/
function isSameNodeType(node, vnode) {
if (_util.isString(vnode)) return _dom.getNodeType(node) === 3;
var nodeName = vnode.nodeName,
type = typeof nodeName;
if (type === 'string') {
return isNamedNode(node, nodeName);
}
Eif (type === 'function') {
return node._componentConstructor === nodeName || _functionalComponent.isFunctionalComponent(vnode);
}
}
function isNamedNode(node, nodeName) {
return (node.normalizedNodeName || _util.toLowerCase(node.nodeName)) === _util.toLowerCase(nodeName);
}
/**
* Reconstruct Component-style `props` from a VNode.
* Ensures default/fallback values from `defaultProps`:
* Own-properties of `defaultProps` not present in `vnode.attributes` are added.
* @param {VNode} vnode
* @returns {Object} props
*/
function getNodeProps(vnode) {
var defaultProps = vnode.nodeName.defaultProps,
props = _util.clone(defaultProps || vnode.attributes);
if (defaultProps) _util.extend(props, vnode.attributes);
if (vnode.children) props.children = vnode.children;
return props;
}
|