/* @flow */ import { warn } from 'core/util/debug' import { handleError } from 'core/util/error' import { RECYCLE_LIST_MARKER } from 'weex/util/index' import { createComponentInstanceForVnode } from 'core/vdom/create-component' import { resolveVirtualComponent } from './virtual-component' export function isRecyclableComponent (vnode: VNodeWithData): boolean { return vnode.data.attrs ? (RECYCLE_LIST_MARKER in vnode.data.attrs) : false } export function renderRecyclableComponentTemplate (vnode: MountedComponentVNode): VNode { // $flow-disable-line delete vnode.data.attrs[RECYCLE_LIST_MARKER] resolveVirtualComponent(vnode) const vm = createComponentInstanceForVnode(vnode) const render = (vm.$options: any)['@render'] if (render) { try { return render.call(vm) } catch (err) { handleError(err, vm, `@render`) } } else { warn( `@render function not defined on component used in . ` + `Make sure to declare \`recyclable="true"\` on the component's template.`, vm ) } }