wip: allow compatConfig mode to be a function
This commit is contained in:
parent
9db3cbbfc1
commit
37ee2959fc
@ -1,5 +1,6 @@
|
|||||||
import { extend, hasOwn, isArray } from '@vue/shared'
|
import { extend, hasOwn, isArray, isFunction } from '@vue/shared'
|
||||||
import {
|
import {
|
||||||
|
Component,
|
||||||
ComponentInternalInstance,
|
ComponentInternalInstance,
|
||||||
ComponentOptions,
|
ComponentOptions,
|
||||||
formatComponentName,
|
formatComponentName,
|
||||||
@ -505,7 +506,7 @@ export function warnDeprecation(
|
|||||||
export type CompatConfig = Partial<
|
export type CompatConfig = Partial<
|
||||||
Record<DeprecationTypes, boolean | 'suppress-warning'>
|
Record<DeprecationTypes, boolean | 'suppress-warning'>
|
||||||
> & {
|
> & {
|
||||||
MODE?: 2 | 3
|
MODE?: 2 | 3 | ((comp: Component | null) => 2 | 3)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const globalCompatConfig: CompatConfig = {
|
export const globalCompatConfig: CompatConfig = {
|
||||||
@ -574,8 +575,13 @@ export function isCompatEnabled(
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
const mode = getCompatConfigForKey('MODE', instance) || 2
|
const rawMode = getCompatConfigForKey('MODE', instance) || 2
|
||||||
const val = getCompatConfigForKey(key, instance)
|
const val = getCompatConfigForKey(key, instance)
|
||||||
|
|
||||||
|
const mode = isFunction(rawMode)
|
||||||
|
? rawMode(instance && instance.type)
|
||||||
|
: rawMode
|
||||||
|
|
||||||
if (mode === 2) {
|
if (mode === 2) {
|
||||||
return val !== false
|
return val !== false
|
||||||
} else {
|
} else {
|
||||||
|
@ -6,6 +6,7 @@ import {
|
|||||||
toggleDeprecationWarning
|
toggleDeprecationWarning
|
||||||
} from '../../runtime-core/src/compat/compatConfig'
|
} from '../../runtime-core/src/compat/compatConfig'
|
||||||
import { triggerEvent } from './utils'
|
import { triggerEvent } from './utils'
|
||||||
|
import { h } from '@vue/runtime-core'
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
toggleDeprecationWarning(true)
|
toggleDeprecationWarning(true)
|
||||||
@ -20,6 +21,31 @@ afterEach(() => {
|
|||||||
Vue.configureCompat({ MODE: 3 })
|
Vue.configureCompat({ MODE: 3 })
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('mode as function', () => {
|
||||||
|
const Foo = {
|
||||||
|
name: 'Foo',
|
||||||
|
render: (h: any) => h('div', 'foo')
|
||||||
|
}
|
||||||
|
|
||||||
|
const Bar = {
|
||||||
|
name: 'Bar',
|
||||||
|
data: () => ({ msg: 'bar' }),
|
||||||
|
render: (ctx: any) => h('div', ctx.msg)
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleDeprecationWarning(false)
|
||||||
|
Vue.configureCompat({
|
||||||
|
MODE: comp => (comp && comp.name === 'Bar' ? 3 : 2)
|
||||||
|
})
|
||||||
|
|
||||||
|
const vm = new Vue({
|
||||||
|
components: { Foo, Bar },
|
||||||
|
template: `<div><foo/><bar/></div>`
|
||||||
|
}).$mount()
|
||||||
|
|
||||||
|
expect(vm.$el.innerHTML).toBe(`<div>foo</div><div>bar</div>`)
|
||||||
|
})
|
||||||
|
|
||||||
test('WATCH_ARRAY', async () => {
|
test('WATCH_ARRAY', async () => {
|
||||||
const spy = jest.fn()
|
const spy = jest.fn()
|
||||||
const vm = new Vue({
|
const vm = new Vue({
|
||||||
|
Loading…
Reference in New Issue
Block a user