app.config.optionMergeStrategies.foo = (a, b) => (a ? `${a},` : ``) + b
app.mount(nodeOps.createElement('div'))
- expect(merged!).toBe('local,extends,mixin,global')
+ expect(merged!).toBe('global,extends,mixin,local')
})
test('config.globalProperties', () => {
const globalMixins = instance.appContext.mixins
if (!globalMixins.length && !mixins && !extendsOptions) return raw
const options = {}
- mergeOptions(options, raw, instance)
globalMixins.forEach(m => mergeOptions(options, m, instance))
+ mergeOptions(options, raw, instance)
return (raw.__merged = options)
}
function mergeOptions(to: any, from: any, instance: ComponentInternalInstance) {
const strats = instance.appContext.config.optionMergeStrategies
+ const { mixins, extends: extendsOptions } = from
+
+ extendsOptions && mergeOptions(to, extendsOptions, instance)
+ mixins &&
+ mixins.forEach((m: ComponentOptionsMixin) => mergeOptions(to, m, instance))
+
for (const key in from) {
if (strats && hasOwn(strats, key)) {
to[key] = strats[key](to[key], from[key], instance.proxy, key)
- } else if (!hasOwn(to, key)) {
+ } else {
to[key] = from[key]
}
}
- const { mixins, extends: extendsOptions } = from
-
- extendsOptions && mergeOptions(to, extendsOptions, instance)
- mixins &&
- mixins.forEach((m: ComponentOptionsMixin) => mergeOptions(to, m, instance))
}