vue
Version:
Reactive, component-oriented view layer for modern web interfaces.
31 lines (29 loc) • 850 B
text/typescript
import type { ScopedSlotsData } from 'types/vnode'
import { isArray } from 'core/util'
export function resolveScopedSlots(
fns: ScopedSlotsData,
res?: Record<string, any>,
// the following are added in 2.6
hasDynamicKeys?: boolean,
contentHashKey?: number
): { $stable: boolean } & { [key: string]: Function } {
res = res || { $stable: !hasDynamicKeys }
for (let i = 0; i < fns.length; i++) {
const slot = fns[i]
if (isArray(slot)) {
resolveScopedSlots(slot, res, hasDynamicKeys)
} else if (slot) {
// marker for reverse proxying v-slot without scope on this.$slots
// @ts-expect-error
if (slot.proxy) {
// @ts-expect-error
slot.fn.proxy = true
}
res[slot.key] = slot.fn
}
}
if (contentHashKey) {
;(res as any).$key = contentHashKey
}
return res as any
}