import { Component } from './Component' import { createVNode } from './createVNode' import { isVNode } from './isVNode' import { VNode } from './VNode' /** * x * * @param name {string | Component} * @param props {object} * @param ... {object} * @return {VNode} */ export function x ( name: string | Component | ((name, props, ...rest) => VNode), props: any, ...rest: any[] ): VNode { const children: VNode[] = [] while (rest.length) { const node = rest.pop() if (node && Array.isArray(node)) { rest = rest.concat(node) } else if (node != null && node !== true && node !== false) { children.unshift((isVNode(node) && node) || createVNode(true, node)) } } return createVNode(false, name, props || {}, children) }