import { isNil } from 'lodash-es';

/**
 * 如果传入的值是 Text 对象或 HTMLElement 对象或 SVG 对象，则直接返回；
 * 如果是 Vue 组件选项对象，则返回它的 DOM 元素；
 * 如果传入 null 参数，则返回 null。
 */
function getElementFromVueInstance(val) {
  if (!val) {
    return null;
  }
  if (val instanceof Text) {
    return val;
  }
  if (val instanceof HTMLElement) {
    return val;
  }
  if (val instanceof SVGElement) {
    return val;
  }
  if (typeof val === 'object' && !isNil(val.$el)) {
    return val.$el;
  }
  throw new Error('getElementFromVueInstance 传入的值不是 Text、HTMLElement、SVG 或 Vue 组件选项对象');
}

export { getElementFromVueInstance as default };
