{"version":3,"file":"vnode.mjs","sources":["../../../../../packages/utils/vue/vnode.ts"],"sourcesContent":["import {\n  Comment,\n  Fragment,\n  Text,\n  createBlock,\n  createCommentVNode,\n  isVNode,\n  openBlock,\n} from 'vue'\nimport { camelize, isArray } from '@vue/shared'\nimport { hasOwn } from '../objects'\nimport { debugWarn } from '../error'\nimport type {\n  VNode,\n  VNodeArrayChildren,\n  VNodeChild,\n  VNodeNormalizedChildren,\n} from 'vue'\n\nconst SCOPE = 'utils/vue/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 type VNodeChildAtom = Exclude<VNodeChild, Array<any>>\nexport type RawSlots = Exclude<\n  VNodeNormalizedChildren,\n  Array<any> | null | string\n>\n\nexport function isFragment(node: VNode): boolean\nexport function isFragment(node: unknown): node is VNode\nexport function isFragment(node: unknown): node is VNode {\n  return isVNode(node) && node.type === Fragment\n}\n\nexport function isText(node: VNode): boolean\nexport function isText(node: unknown): node is VNode\nexport function isText(node: unknown): node is VNode {\n  return isVNode(node) && node.type === Text\n}\n\nexport function isComment(node: VNode): boolean\nexport function isComment(node: unknown): node is VNode\nexport function isComment(node: unknown): node is VNode {\n  return isVNode(node) && node.type === Comment\n}\n\nconst TEMPLATE = 'template'\nexport function isTemplate(node: VNode): boolean\nexport function isTemplate(node: unknown): node is VNode\nexport function isTemplate(node: unknown): node is VNode {\n  return isVNode(node) && node.type === TEMPLATE\n}\n\n/**\n * determine if the element is a valid element type rather than fragments and comment e.g. <template> v-if\n * @param node {VNode} node to be tested\n */\nexport function isValidElementNode(node: VNode): boolean\nexport function isValidElementNode(node: unknown): node is VNode\nexport function isValidElementNode(node: unknown): node is VNode {\n  return isVNode(node) && !isFragment(node) && !isComment(node)\n}\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(\n  node: VNodeNormalizedChildren | VNodeChild,\n  depth: number\n): VNodeNormalizedChildren | VNodeChild {\n  if (isComment(node)) return\n  if (isFragment(node) || isTemplate(node)) {\n    return depth > 0 ? getFirstValidNode(node.children, depth - 1) : undefined\n  }\n  return node\n}\n\nexport const getFirstValidNode = (\n  nodes: VNodeNormalizedChildren,\n  maxDepth = 3\n) => {\n  if (Array.isArray(nodes)) {\n    return getChildren(nodes[0], maxDepth)\n  } else {\n    return getChildren(nodes, maxDepth)\n  }\n}\n\nexport function renderIf(\n  condition: boolean,\n  ...args: Parameters<typeof createBlock>\n) {\n  return condition ? renderBlock(...args) : createCommentVNode('v-if', true)\n}\n\nexport function renderBlock(...args: Parameters<typeof createBlock>) {\n  return openBlock(), createBlock(...args)\n}\n\nexport const getNormalizedProps = (node: VNode) => {\n  if (!isVNode(node)) {\n    debugWarn(SCOPE, '[getNormalizedProps] must be a VNode')\n    return {}\n  }\n\n  const raw = node.props || {}\n  const type = (isVNode(node.type) ? node.type.props : undefined) || {}\n  const props: Record<string, any> = {}\n\n  Object.keys(type).forEach((key) => {\n    if (hasOwn(type[key], 'default')) {\n      props[key] = type[key].default\n    }\n  })\n\n  Object.keys(raw).forEach((key) => {\n    props[camelize(key)] = raw[key]\n  })\n\n  return props\n}\n\nexport const ensureOnlyChild = (children: VNodeArrayChildren | undefined) => {\n  if (!isArray(children) || children.length > 1) {\n    throw new Error('expect to receive a single Vue element child')\n  }\n  return children[0]\n}\n\nexport type FlattenVNodes = Array<VNodeChildAtom | RawSlots>\n\nexport const flattedChildren = (\n  children: FlattenVNodes | VNode | VNodeNormalizedChildren\n): FlattenVNodes => {\n  const vNodes = isArray(children) ? children : [children]\n  const result: FlattenVNodes = []\n\n  vNodes.forEach((child) => {\n    if (isArray(child)) {\n      result.push(...flattedChildren(child))\n    } else if (isVNode(child) && isArray(child.children)) {\n      result.push(...flattedChildren(child.children))\n    } else {\n      result.push(child)\n      if (isVNode(child) && child.component?.subTree) {\n        result.push(...flattedChildren(child.component.subTree))\n      }\n    }\n  })\n  return result\n}\n"],"names":["PatchFlags"],"mappings":"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"}