import Vue from 'vue'

export const compile = (tpl, vm) => {
  const keys = ['methods', 'computed', 'data', 'filters']
  const props = {}

  const node = Vue.compile(tpl)
  keys.forEach(key => {
    props[key] = vm.$parent.$parent.$options[key]

    if (key === 'data' && typeof props[key] === 'function') {
      props[key] = props[key]()
    }
  })

  const vNode = new Vue({
    ...props,
    ...node
  })

  vNode.$mount()
  return vNode
}

export const mountedVNode = (vn) => {
  const instance = new Vue({ render: (h) => h('div', vn) })
  instance.$mount()
  return instance
}

export const mountedRenderFn = (renderFn, vueInstance) => {
  const instance = new Vue({ render: h => renderFn(h, vueInstance) })
  instance.$mount()
  return instance
}
