{"version":3,"file":"render-tnode.mjs","sources":["../../node_modules/lodash/isEmpty.js","../../src/utils/render-tnode.ts"],"sourcesContent":["var baseKeys = require('./_baseKeys'),\n    getTag = require('./_getTag'),\n    isArguments = require('./isArguments'),\n    isArray = require('./isArray'),\n    isArrayLike = require('./isArrayLike'),\n    isBuffer = require('./isBuffer'),\n    isPrototype = require('./_isPrototype'),\n    isTypedArray = require('./isTypedArray');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n    setTag = '[object Set]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\nfunction isEmpty(value) {\n  if (value == null) {\n    return true;\n  }\n  if (isArrayLike(value) &&\n      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n        isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n    return !value.length;\n  }\n  var tag = getTag(value);\n  if (tag == mapTag || tag == setTag) {\n    return !value.size;\n  }\n  if (isPrototype(value)) {\n    return !baseKeys(value).length;\n  }\n  for (var key in value) {\n    if (hasOwnProperty.call(value, key)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nmodule.exports = isEmpty;\n","import { h, ComponentPublicInstance, VNode, isVNode } from 'vue';\nimport isEmpty from 'lodash/isEmpty';\nimport isString from 'lodash/isString';\nimport isFunction from 'lodash/isFunction';\nimport isObject from 'lodash/isObject';\nimport camelCase from 'lodash/camelCase';\nimport kebabCase from 'lodash/kebabCase';\n\nexport interface JSXRenderContext {\n  defaultNode?: VNode | string;\n  params?: Record<string, any>;\n  slotFirst?: boolean;\n  // 是否不打印 LOG\n  silent?: boolean;\n}\n\nexport type OptionsType = VNode | JSXRenderContext | string;\n\nexport function getDefaultNode(options?: OptionsType) {\n  let defaultNode;\n  if (isObject(options) && 'defaultNode' in options) {\n    defaultNode = options.defaultNode;\n  } else if (isVNode(options) || isString(options)) {\n    defaultNode = options;\n  }\n\n  return defaultNode;\n}\n\nexport function getParams(options?: OptionsType) {\n  return isObject(options) && 'params' in options ? options.params : {};\n}\n\nexport function getSlotFirst(options?: OptionsType) {\n  return isObject(options) && 'slotFirst' in options ? options.slotFirst : {};\n}\n\n// 同时支持驼峰命名和中划线命名的插槽，示例：value-display 和 valueDisplay\nexport function handleSlots(instance: ComponentPublicInstance, params: Record<string, any>, name: string) {\n  // 检查是否存在 驼峰命名 的插槽\n  let node = instance.$slots[camelCase(name)]?.(params);\n  if (node) return node;\n  // 检查是否存在 中划线命名 的插槽\n  node = instance.$slots[kebabCase(name)]?.(params);\n  if (node) return node;\n  return null;\n}\n\n/**\n * 通过JSX的方式渲染 TNode，props 和 插槽同时处理，也能处理默认值为 true 则渲染默认节点的情况\n * @param vm 组件实例\n * @param name 插槽和属性名称\n * @param options 值可能为默认渲染节点，也可能是默认渲染节点和参数的集合\n * @example renderTNodeJSX(this, 'closeBtn')  优先级 props function 大于 插槽\n * @example renderTNodeJSX(this, 'closeBtn', <close-icon />)。 当属性值为 true 时则渲染 <close-icon />\n * @example renderTNodeJSX(this, 'closeBtn', { defaultNode: <close-icon />, params })。 params 为渲染节点时所需的参数\n */\nexport const renderTNodeJSX = (instance: ComponentPublicInstance, name: string, options?: OptionsType) => {\n  // assemble params && defaultNode\n  const params = getParams(options);\n  const defaultNode = getDefaultNode(options);\n\n  // 处理 props 类型的Node\n  let propsNode;\n  if (name in instance) {\n    propsNode = instance[name];\n  }\n\n  // 是否静默日志\n  // const isSilent = Boolean(isObject(options) && 'silent' in options && options.silent);\n  // // 同名插槽和属性同时存在，则提醒用户只需要选择一种方式即可\n  // if (instance.$slots[name] && propsNode && propsNode !== true && !isSilent) {\n  //   console.warn(`Both $slots.${name} and $props.${name} exist, $props.${name} is preferred`);\n  // }\n\n  // propsNode 为 false 不渲染\n  if (propsNode === false) return;\n  if (propsNode === true && defaultNode) {\n    return handleSlots(instance, params, name) || defaultNode;\n  }\n\n  // 同名 props 和 slot 优先处理 props\n  if (isFunction(propsNode)) return propsNode(h, params);\n  const isPropsEmpty = [undefined, params, ''].includes(propsNode);\n  // Props 为空，但插槽存在\n  if (isPropsEmpty && (instance.$slots[camelCase(name)] || instance.$slots[kebabCase(name)])) {\n    return handleSlots(instance, params, name);\n  }\n  return propsNode;\n};\n\n/**\n * 通过JSX的方式渲染 TNode，props 和 插槽同时处理。与 renderTNodeJSX 区别在于 属性值为 undefined 时会渲染默认节点\n * @param vm 组件实例\n * @param name 插槽和属性名称\n * @example renderTNodeJSX(this, 'closeBtn')\n * @example renderTNodeJSX(this, 'closeBtn', <close-icon />)。this.closeBtn 为空时，则兜底渲染 <close-icon />\n * @example renderTNodeJSX(this, 'closeBtn', { defaultNode: <close-icon />, params }) 。params 为渲染节点时所需的参数\n */\nexport const renderTNodeJSXDefault = (vm: ComponentPublicInstance, name: string, options?: OptionsType) => {\n  const defaultNode = getDefaultNode(options);\n  return renderTNodeJSX(vm, name, options) || defaultNode;\n};\n\n/**\n * 用于处理相同名称的 TNode 渲染\n * @param vm 组件实例\n * @param name1 第一个名称，优先级高于 name2\n * @param name2 第二个名称\n * @param defaultNode 默认渲染内容：当 name1 和 name2 都为空时会启动默认内容渲染\n * @example renderContent(this, 'default', 'content')\n * @example renderContent(this, 'default', 'content', '我是默认内容')\n * @example renderContent(this, 'default', 'content', { defaultNode: '我是默认内容', params })\n */\nexport const renderContent = (vm: ComponentPublicInstance, name1: string, name2: string, options?: OptionsType) => {\n  const params = getParams(options);\n  const defaultNode = getDefaultNode(options);\n\n  const toParams = params ? { params } : undefined;\n\n  const node1 = renderTNodeJSX(vm, name1, toParams);\n  const node2 = renderTNodeJSX(vm, name2, toParams);\n\n  const res = isEmpty(node1) ? node2 : node1;\n  return isEmpty(res) ? defaultNode : res;\n};\n"],"names":["baseKeys","require$$0","getTag","require$$1","isArguments","require$$2","isArray","require$$3","isArrayLike","require$$4","isBuffer","require$$5","isPrototype","require$$6","isTypedArray","require$$7","mapTag","setTag","objectProto","Object","prototype","hasOwnProperty","isEmpty","value","splice","length","tag","size","key","call","isEmpty_1","getDefaultNode","options","defaultNode","isObject","isVNode","isString","getParams","params","getSlotFirst","slotFirst","handleSlots","instance","name","_instance$$slots$came","_instance$$slots","_instance$$slots$keba","_instance$$slots2","node","$slots","camelCase","kebabCase","renderTNodeJSX","propsNode","isFunction","h","isPropsEmpty","includes","renderTNodeJSXDefault","vm","renderContent","name1","name2","toParams","node1","node2","res"],"mappings":"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"}