'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 node.normalizedNodeName === nodeName || isNamedNode(node, nodeName);
}
Eif (type === 'function') {
return node._componentConstructor === nodeName || _functionalComponent.isFunctionalComponent(vnode);
}
}
function isNamedNode(node, nodeName) {
return _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 props = _util.clone(vnode.attributes),
c = vnode.children;
if (c) props.children = c;
var defaultProps = vnode.nodeName.defaultProps;
if (defaultProps) {
for (var i in defaultProps) {
if (_util.hasOwnProperty.call(defaultProps, i) && !(i in props)) {
props[i] = defaultProps[i];
}
}
}
return props;
}
|