{"version":3,"file":"vnode.mjs","sources":["../../../../packages/utils/vnode.ts"],"sourcesContent":["import {\n Fragment,\n Text,\n Comment,\n createBlock,\n openBlock,\n createCommentVNode,\n isVNode,\n camelize,\n} from 'vue'\n\nimport { hasOwn } from '@vue/shared'\nimport { debugWarn } from './error'\nimport type { VNode, VNodeTypes, VNodeChild } from 'vue'\n\ntype Children = VNodeTypes[] | VNodeTypes\n\nconst TEMPLATE = 'template'\n\nexport const SCOPE = 'VNode'\n\nexport enum PatchFlags {\n TEXT = 1,\n CLASS = 2,\n STYLE = 4,\n PROPS = 8,\n FULL_PROPS = 16,\n HYDRATE_EVENTS = 32,\n STABLE_FRAGMENT = 64,\n KEYED_FRAGMENT = 128,\n UNKEYED_FRAGMENT = 256,\n NEED_PATCH = 512,\n DYNAMIC_SLOTS = 1024,\n HOISTED = -1,\n BAIL = -2,\n}\n\nexport const isFragment = (node: unknown): node is VNode =>\n isVNode(node) && node.type === Fragment\n\nexport const isText = (node: VNodeChild) => (node as VNode).type === Text\n\nexport const isComment = (node: VNodeChild) => (node as VNode).type === Comment\n\nexport const isTemplate = (node: VNodeChild) =>\n (node as VNode).type === TEMPLATE\n\n/**\n * get a valid child node (not fragment nor comment)\n * @param node {VNode} node to be searched\n * @param depth {number} depth to be searched\n */\nfunction getChildren(node: VNode, depth: number): undefined | VNode {\n if (isComment(node)) return\n if (isFragment(node) || isTemplate(node)) {\n return depth > 0\n ? getFirstValidNode(node.children as VNodeChild, depth - 1)\n : undefined\n }\n return node\n}\n\n/**\n * determine if the element is a valid element type rather than fragments and comment e.g.