29 lines
922 B
TypeScript
29 lines
922 B
TypeScript
import { ShapeFlags } from '@vue/shared/src'
|
|
import { ComponentInternalInstance } from '../component'
|
|
import { ComponentPublicInstance } from '../componentPublicInstance'
|
|
import { VNode } from '../vnode'
|
|
import { assertCompatEnabled, DeprecationTypes } from './compatConfig'
|
|
|
|
export function getCompatChildren(
|
|
instance: ComponentInternalInstance
|
|
): ComponentPublicInstance[] {
|
|
assertCompatEnabled(DeprecationTypes.INSTANCE_CHILDREN, instance)
|
|
const root = instance.subTree
|
|
const children: ComponentPublicInstance[] = []
|
|
if (root) {
|
|
walk(root, children)
|
|
}
|
|
return children
|
|
}
|
|
|
|
function walk(vnode: VNode, children: ComponentPublicInstance[]) {
|
|
if (vnode.component) {
|
|
children.push(vnode.component.proxy!)
|
|
} else if (vnode.shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
|
|
const vnodes = vnode.children as VNode[]
|
|
for (let i = 0; i < vnodes.length; i++) {
|
|
walk(vnodes[i], children)
|
|
}
|
|
}
|
|
}
|