{"version":3,"file":"vnode.mjs","sources":["../../../../packages/utils/vnode.ts"],"sourcesContent":["import {\r\n  Fragment,\r\n  Text,\r\n  Comment,\r\n  createBlock,\r\n  openBlock,\r\n  createCommentVNode,\r\n  isVNode,\r\n  camelize,\r\n} from 'vue'\r\n\r\nimport { hasOwn, isArray } from '@vue/shared'\r\nimport { debugWarn } from './error'\r\nimport type { VNode, VNodeTypes, VNodeChild, VNodeNormalizedChildren } from 'vue'\r\n\r\ntype Children = VNodeTypes[] | VNodeTypes\r\n\r\nconst TEMPLATE = 'template'\r\n\r\nconst SCOPE = 'VNode'\r\n\r\nexport enum PatchFlags {\r\n  TEXT = 1,\r\n  CLASS = 2,\r\n  STYLE = 4,\r\n  PROPS = 8,\r\n  FULL_PROPS = 16,\r\n  HYDRATE_EVENTS = 32,\r\n  STABLE_FRAGMENT = 64,\r\n  KEYED_FRAGMENT = 128,\r\n  UNKEYED_FRAGMENT = 256,\r\n  NEED_PATCH = 512,\r\n  DYNAMIC_SLOTS = 1024,\r\n  HOISTED = -1,\r\n  BAIL = -2,\r\n}\r\n\r\nexport type VNodeChildAtom = Exclude<VNodeChild, Array<any>>\r\nexport type RawSlots = Exclude<\r\n  VNodeNormalizedChildren,\r\n  Array<any> | null | string\r\n>\r\n\r\nexport const isFragment = (node: unknown): node is VNode =>\r\n  isVNode(node) && node.type === Fragment\r\n\r\nexport const isText = (node: VNodeChild) => (node as VNode).type === Text\r\n\r\nexport const isComment = (node: VNodeChild) => (node as VNode).type === Comment\r\n\r\nexport const isTemplate = (node: VNodeChild) =>\r\n  (node as VNode).type === TEMPLATE\r\n\r\n/**\r\n * get a valid child node (not fragment nor comment)\r\n * @param node {VNode} node to be searched\r\n * @param depth {number} depth to be searched\r\n */\r\nfunction getChildren(node: VNode, depth: number): undefined | VNode {\r\n  if (isComment(node)) return\r\n  if (isFragment(node) || isTemplate(node)) {\r\n    return depth > 0\r\n      ? getFirstValidNode(node.children as VNodeChild, depth - 1)\r\n      : undefined\r\n  }\r\n  return node\r\n}\r\n\r\n/**\r\n * determine if the element is a valid element type rather than fragments and comment e.g. <template> v-if\r\n * @param node {VNode} node to be tested\r\n */\r\nexport const isValidElementNode = (node: unknown): node is VNode =>\r\n  isVNode(node) && !isFragment(node) && !isComment(node)\r\n\r\nexport const getFirstValidNode = (\r\n  nodes: VNodeChild,\r\n  maxDepth = 3\r\n): ReturnType<typeof getChildren> => {\r\n  if (Array.isArray(nodes)) {\r\n    return getChildren(nodes[0] as VNode, maxDepth)\r\n  } else {\r\n    return getChildren(nodes as VNode, maxDepth)\r\n  }\r\n}\r\n\r\nexport function renderIf(\r\n  condition: boolean,\r\n  node: VNodeTypes,\r\n  props: any,\r\n  children?: Children,\r\n  patchFlag?: number,\r\n  patchProps?: string[]\r\n) {\r\n  return condition\r\n    ? renderBlock(node, props, children, patchFlag, patchProps)\r\n    : createCommentVNode('v-if', true)\r\n}\r\n\r\nexport function renderBlock(\r\n  node: VNodeTypes,\r\n  props: any,\r\n  children?: Children,\r\n  patchFlag?: number,\r\n  patchProps?: string[]\r\n) {\r\n  return openBlock(), createBlock(node, props, children, patchFlag, patchProps)\r\n}\r\n\r\n/**\r\n * todo\r\n * get normalized props from VNode\r\n * @param node\r\n */\r\nexport const getNormalizedProps = (node: VNode) => {\r\n  if (!isVNode(node)) {\r\n    debugWarn(SCOPE, 'value must be a VNode')\r\n    return\r\n  }\r\n\r\n  const raw = node.props || {}\r\n  const type = (node.type as any).props || {}\r\n  const props = {} as any\r\n\r\n  Object.keys(type).forEach((key) => {\r\n    if (hasOwn(type[key], 'default')) {\r\n      props[key] = type[key].default\r\n    }\r\n  })\r\n\r\n  Object.keys(raw).forEach((key) => {\r\n    props[camelize(key)] = raw[key]\r\n  })\r\n\r\n  return props\r\n}\r\n\r\nexport type FlattenVNodes = Array<VNodeChildAtom | RawSlots>\r\n\r\nexport const flattedChildren = (\r\n  children: FlattenVNodes | VNode | VNodeNormalizedChildren\r\n): FlattenVNodes => {\r\n  const vNodes = isArray(children) ? children : [children]\r\n  const result: FlattenVNodes = []\r\n\r\n  vNodes.forEach((child) => {\r\n    if (isArray(child)) {\r\n      result.push(...flattedChildren(child))\r\n    } else if (isVNode(child) && isArray(child.children)) {\r\n      result.push(...flattedChildren(child.children))\r\n    } else {\r\n      result.push(child)\r\n      if (isVNode(child) && child.component?.subTree) {\r\n        result.push(...flattedChildren(child.component.subTree))\r\n      }\r\n    }\r\n  })\r\n  return result\r\n}\r\n"],"names":[],"mappings":"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"}