UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 4.49 kB
{"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. <template> v-if\n * @param node {VNode} node to be tested\n */\nexport const isValidElementNode = (node: unknown): node is VNode =>\n isVNode(node) && !isFragment(node) && !isComment(node)\n\nexport const getFirstValidNode = (\n nodes: VNodeChild,\n maxDepth = 3\n): ReturnType<typeof getChildren> => {\n if (Array.isArray(nodes)) {\n return getChildren(nodes[0] as VNode, maxDepth)\n } else {\n return getChildren(nodes as VNode, maxDepth)\n }\n}\n\nexport function renderIf(\n condition: boolean,\n node: VNodeTypes,\n props: any,\n children?: Children,\n patchFlag?: number,\n patchProps?: string[]\n) {\n return condition\n ? renderBlock(node, props, children, patchFlag, patchProps)\n : createCommentVNode('v-if', true)\n}\n\nexport function renderBlock(\n node: VNodeTypes,\n props: any,\n children?: Children,\n patchFlag?: number,\n patchProps?: string[]\n) {\n return openBlock(), createBlock(node, props, children, patchFlag, patchProps)\n}\n\n/**\n * todo\n * get normalized props from VNode\n * @param node\n */\nexport const getNormalizedProps = (node: VNode) => {\n if (!isVNode(node)) {\n debugWarn(SCOPE, 'value must be a VNode')\n return\n }\n\n const raw = node.props || {}\n const type = (node.type as any).props || {}\n const props = {} as 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"],"names":[],"mappings":";;;;AAiBA,MAAM,WAAW;MAEJ,QAAQ;IAET;AAAL,UAAK,aAAL;AACL,oCAAO,KAAP;AACA,qCAAQ,KAAR;AACA,qCAAQ,KAAR;AACA,qCAAQ,KAAR;AACA,0CAAa,MAAb;AACA,8CAAiB,MAAjB;AACA,+CAAkB,MAAlB;AACA,8CAAiB,OAAjB;AACA,gDAAmB,OAAnB;AACA,0CAAa,OAAb;AACA,6CAAgB,QAAhB;AACA,uCAAU,MAAV;AACA,oCAAO,MAAP;AAAA,GAbU;MAgBC,aAAa,CAAC,SACzB,QAAQ,SAAS,KAAK,SAAS;MAEpB,SAAS,CAAC,SAAsB,KAAe,SAAS;MAExD,YAAY,CAAC,SAAsB,KAAe,SAAS;MAE3D,aAAa,CAAC,SACxB,KAAe,SAAS;AAO3B,qBAAqB,MAAa,OAAkC;AAClE,MAAI,UAAU;AAAO;AACrB,MAAI,WAAW,SAAS,WAAW,OAAO;AACxC,WAAO,QAAQ,IACX,kBAAkB,KAAK,UAAwB,QAAQ,KACvD;AAAA;AAEN,SAAO;AAAA;MAOI,qBAAqB,CAAC,SACjC,QAAQ,SAAS,CAAC,WAAW,SAAS,CAAC,UAAU;MAEtC,oBAAoB,CAC/B,OACA,WAAW,MACwB;AACnC,MAAI,MAAM,QAAQ,QAAQ;AACxB,WAAO,YAAY,MAAM,IAAa;AAAA,SACjC;AACL,WAAO,YAAY,OAAgB;AAAA;AAAA;kBAKrC,WACA,MACA,OACA,UACA,WACA,YACA;AACA,SAAO,YACH,YAAY,MAAM,OAAO,UAAU,WAAW,cAC9C,mBAAmB,QAAQ;AAAA;qBAI/B,MACA,OACA,UACA,WACA,YACA;AACA,SAAO,aAAa,YAAY,MAAM,OAAO,UAAU,WAAW;AAAA;MAQvD,qBAAqB,CAAC,SAAgB;AACjD,MAAI,CAAC,QAAQ,OAAO;AAClB,cAAU,OAAO;AACjB;AAAA;AAGF,QAAM,MAAM,KAAK,SAAS;AAC1B,QAAM,OAAQ,KAAK,KAAa,SAAS;AACzC,QAAM,QAAQ;AAEd,SAAO,KAAK,MAAM,QAAQ,CAAC,QAAQ;AACjC,QAAI,OAAO,KAAK,MAAM,YAAY;AAChC,YAAM,OAAO,KAAK,KAAK;AAAA;AAAA;AAI3B,SAAO,KAAK,KAAK,QAAQ,CAAC,QAAQ;AAChC,UAAM,SAAS,QAAQ,IAAI;AAAA;AAG7B,SAAO;AAAA;;;;"}