import _typeof from 'babel-runtime/helpers/typeof'; import _extends from 'babel-runtime/helpers/extends'; import _slicedToArray from 'babel-runtime/helpers/slicedToArray'; import isPlainObject from 'lodash/isPlainObject'; import classNames from 'classnames'; function getType(fn) { var match = fn && fn.toString().match(/^\s*function (\w+)/); return match ? match[1] : ''; } var camelizeRE = /-(\w)/g; var camelize = function camelize(str) { return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; }); }; var parseStyleText = function parseStyleText() { var cssText = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ''; var camel = arguments[1]; var res = {}; var listDelimiter = /;(?![^(]*\))/g; var propertyDelimiter = /:(.+)/; cssText.split(listDelimiter).forEach(function (item) { if (item) { var tmp = item.split(propertyDelimiter); if (tmp.length > 1) { var k = camel ? camelize(tmp[0].trim()) : tmp[0].trim(); res[k] = tmp[1].trim(); } } }); return res; }; var hasProp = function hasProp(instance, prop) { var $options = instance.$options || {}; var propsData = $options.propsData || {}; return prop in propsData; }; var slotHasProp = function slotHasProp(slot, prop) { var $options = slot.componentOptions || {}; var propsData = $options.propsData || {}; return prop in propsData; }; var filterProps = function filterProps(props) { var propsData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var res = {}; Object.keys(props).forEach(function (k) { if (k in propsData || props[k] !== undefined) { res[k] = props[k]; } }); return res; }; var getSlots = function getSlots(ele) { var componentOptions = ele.componentOptions || {}; if (ele.$vnode) { componentOptions = ele.$vnode.componentOptions || {}; } var children = ele.children || componentOptions.children || []; var slots = {}; children.forEach(function (child) { if (!isEmptyElement(child)) { var name = child.data && child.data.slot || 'default'; slots[name] = slots[name] || []; slots[name].push(child); } }); return slots; }; var getAllChildren = function getAllChildren(ele) { var componentOptions = ele.componentOptions || {}; if (ele.$vnode) { componentOptions = ele.$vnode.componentOptions || {}; } return ele.children || componentOptions.children || []; }; var getSlotOptions = function getSlotOptions(ele) { if (ele.fnOptions) { // 函数式组件 return ele.fnOptions; } var componentOptions = ele.componentOptions; if (ele.$vnode) { componentOptions = ele.$vnode.componentOptions; } return componentOptions ? componentOptions.Ctor.options || {} : {}; }; var getOptionProps = function getOptionProps(instance) { if (instance.componentOptions) { var componentOptions = instance.componentOptions; var _componentOptions$pro = componentOptions.propsData, propsData = _componentOptions$pro === undefined ? {} : _componentOptions$pro, _componentOptions$Cto = componentOptions.Ctor, Ctor = _componentOptions$Cto === undefined ? {} : _componentOptions$Cto; var props = (Ctor.options || {}).props || {}; var res = {}; var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = Object.entries(props)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var _ref = _step.value; var _ref2 = _slicedToArray(_ref, 2); var k = _ref2[0]; var v = _ref2[1]; var def = v['default']; if (def !== undefined) { res[k] = typeof def === 'function' && getType(v.type) !== 'Function' ? def.call(instance) : def; } } } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator['return']) { _iterator['return'](); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return _extends({}, res, propsData); } var _instance$$options = instance.$options, $options = _instance$$options === undefined ? {} : _instance$$options, _instance$$props = instance.$props, $props = _instance$$props === undefined ? {} : _instance$$props; return filterProps($props, $options.propsData); }; var getComponentFromProp = function getComponentFromProp(instance, prop) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : instance; var execute = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true; if (instance.$createElement) { var h = instance.$createElement; var temp = instance[prop]; if (temp !== undefined) { return typeof temp === 'function' && execute ? temp(h, options) : temp; } return instance.$slots[prop] || instance.$scopedSlots[prop] && execute && instance.$scopedSlots[prop](options) || instance.$scopedSlots[prop] || undefined; } else { var _h = instance.context.$createElement; var _temp = getPropsData(instance)[prop]; if (_temp !== undefined) { return typeof _temp === 'function' && execute ? _temp(_h, options) : _temp; } var slotsProp = []; var componentOptions = instance.componentOptions || {}; (componentOptions.children || []).forEach(function (child) { if (child.data && child.data.slot === prop) { if (child.tag === 'template') { slotsProp.push(child.children); } else { slotsProp.push(child); } } }); return slotsProp.length ? slotsProp : undefined; } }; var getAllProps = function getAllProps(ele) { var data = ele.data || {}; var componentOptions = ele.componentOptions || {}; if (ele.$vnode) { data = ele.$vnode.data || {}; componentOptions = ele.$vnode.componentOptions || {}; } return _extends({}, data.props, data.attrs, componentOptions.propsData); }; var getPropsData = function getPropsData(ele) { var componentOptions = ele.componentOptions; if (ele.$vnode) { componentOptions = ele.$vnode.componentOptions; } return componentOptions ? componentOptions.propsData || {} : {}; }; var getValueByProp = function getValueByProp(ele, prop) { return getPropsData(ele)[prop]; }; var getAttrs = function getAttrs(ele) { var data = ele.data; if (ele.$vnode) { data = ele.$vnode.data; } return data ? data.attrs || {} : {}; }; var getKey = function getKey(ele) { var key = ele.key; if (ele.$vnode) { key = ele.$vnode.key; } return key; }; export function getEvents(child) { var events = {}; if (child.componentOptions && child.componentOptions.listeners) { events = child.componentOptions.listeners; } else if (child.data && child.data.on) { events = child.data.on; } return _extends({}, events); } export function getClass(ele) { var data = {}; if (ele.data) { data = ele.data; } else if (ele.$vnode && ele.$vnode.data) { data = ele.$vnode.data; } var tempCls = data['class'] || {}; var staticClass = data.staticClass; var cls = {}; staticClass && staticClass.split(' ').forEach(function (c) { cls[c.trim()] = true; }); if (typeof tempCls === 'string') { tempCls.split(' ').forEach(function (c) { cls[c.trim()] = true; }); } else if (Array.isArray(tempCls)) { classNames(tempCls).split(' ').forEach(function (c) { cls[c.trim()] = true; }); } else { cls = _extends({}, cls, tempCls); } return cls; } export function getStyle(ele, camel) { var data = {}; if (ele.data) { data = ele.data; } else if (ele.$vnode && ele.$vnode.data) { data = ele.$vnode.data; } var style = data.style || data.staticStyle; if (typeof style === 'string') { style = parseStyleText(style, camel); } else if (camel && style) { // 驼峰化 var res = {}; Object.keys(style).forEach(function (k) { return res[camelize(k)] = style[k]; }); return res; } return style; } export function getComponentName(opts) { return opts && (opts.Ctor.options.name || opts.tag); } export function isEmptyElement(c) { return !(c.tag || c.text && c.text.trim() !== ''); } export function filterEmpty() { var children = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; return children.filter(function (c) { return !isEmptyElement(c); }); } var initDefaultProps = function initDefaultProps(propTypes, defaultProps) { Object.keys(defaultProps).forEach(function (k) { if (propTypes[k]) { propTypes[k].def && (propTypes[k] = propTypes[k].def(defaultProps[k])); } else { throw new Error('not have ' + k + ' prop'); } }); return propTypes; }; export function mergeProps() { var args = [].slice.call(arguments, 0); var props = {}; args.forEach(function () { var p = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var _iteratorNormalCompletion2 = true; var _didIteratorError2 = false; var _iteratorError2 = undefined; try { for (var _iterator2 = Object.entries(p)[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { var _ref3 = _step2.value; var _ref4 = _slicedToArray(_ref3, 2); var k = _ref4[0]; var v = _ref4[1]; props[k] = props[k] || {}; if (isPlainObject(v)) { _extends(props[k], v); } else { props[k] = v; } } } catch (err) { _didIteratorError2 = true; _iteratorError2 = err; } finally { try { if (!_iteratorNormalCompletion2 && _iterator2['return']) { _iterator2['return'](); } } finally { if (_didIteratorError2) { throw _iteratorError2; } } } }); return props; } function isValidElement(element) { return element && (typeof element === 'undefined' ? 'undefined' : _typeof(element)) === 'object' && 'componentOptions' in element && 'context' in element && element.tag !== undefined; // remove text node } export { hasProp, filterProps, getOptionProps, getComponentFromProp, getSlotOptions, slotHasProp, getPropsData, getKey, getAttrs, getValueByProp, parseStyleText, initDefaultProps, isValidElement, camelize, getSlots, getAllProps, getAllChildren }; export default hasProp;