UNPKG

1.25 kBJavaScriptView Raw
1import { clone, isString, isFunction, toLowerCase } from '../util';
2import { isFunctionalComponent } from './functional-component';
3
4
5/** Check if two nodes are equivalent.
6 * @param {Element} node
7 * @param {VNode} vnode
8 * @private
9 */
10export function isSameNodeType(node, vnode) {
11 if (isString(vnode)) {
12 return node instanceof Text;
13 }
14 if (isString(vnode.nodeName)) {
15 return isNamedNode(node, vnode.nodeName);
16 }
17 if (isFunction(vnode.nodeName)) {
18 return node._componentConstructor===vnode.nodeName || isFunctionalComponent(vnode);
19 }
20}
21
22
23export function isNamedNode(node, nodeName) {
24 return node.normalizedNodeName===nodeName || toLowerCase(node.nodeName)===toLowerCase(nodeName);
25}
26
27
28/**
29 * Reconstruct Component-style `props` from a VNode.
30 * Ensures default/fallback values from `defaultProps`:
31 * Own-properties of `defaultProps` not present in `vnode.attributes` are added.
32 * @param {VNode} vnode
33 * @returns {Object} props
34 */
35export function getNodeProps(vnode) {
36 let props = clone(vnode.attributes);
37 props.children = vnode.children;
38
39 let defaultProps = vnode.nodeName.defaultProps;
40 if (defaultProps) {
41 for (let i in defaultProps) {
42 if (props[i]===undefined) {
43 props[i] = defaultProps[i];
44 }
45 }
46 }
47
48 return props;
49}