UNPKG

vue-facing-decorator

Version:

Vue typescript class and decorator based component.

25 lines (24 loc) 905 B
import type { VueConsAny } from '../class' import type { OptionBuilder } from '../optionBuilder' import { filterNames, getValidOwnPropertyNames } from '../utils' import { obtainSlot } from '../slot' export function build(cons: VueConsAny, optionBuilder: OptionBuilder) { optionBuilder.data ??= {} const sample = new cons() let names = getValidOwnPropertyNames(sample, (des, name) => { return !!des.enumerable && !optionBuilder.methods?.[name] && !optionBuilder.props?.[name] }) const slot = obtainSlot(cons.prototype) //include these names: //provide, user may access field directly //customDecorator names = filterNames(names, slot, ['provide', 'customDecorator']) Object.assign(optionBuilder.data, names.reduce<Record<string, any>>((pv, cv) => { pv[cv] = sample[cv] return pv }, {}) ) }