vue3-core/packages/runtime-core/src/compat/compatConfig.ts

61 lines
1.6 KiB
TypeScript
Raw Normal View History

2021-04-07 23:22:56 +08:00
import { extend } from '@vue/shared'
import { ComponentOptions, getCurrentInstance } from '../component'
import { DeprecationTypes, warnDeprecation } from './deprecations'
2021-04-07 23:22:56 +08:00
export type CompatConfig = Partial<
Record<DeprecationTypes, boolean | 'suppress-warning'>
> & {
MODE?: 2 | 3
2021-04-07 23:22:56 +08:00
}
const globalCompatConfig: CompatConfig = {}
export function configureCompat(config: CompatConfig) {
extend(globalCompatConfig, config)
}
export function getCompatConfigForKey(key: DeprecationTypes | 'MODE') {
const instance = getCurrentInstance()
const instanceConfig =
instance && (instance.type as ComponentOptions).compatConfig
if (instanceConfig && key in instanceConfig) {
return instanceConfig[key]
}
2021-04-07 23:22:56 +08:00
return globalCompatConfig[key]
}
2021-04-08 00:24:45 +08:00
export function isCompatEnabled(key: DeprecationTypes): boolean {
const mode = getCompatConfigForKey('MODE') || 2
const val = getCompatConfigForKey(key)
if (mode === 2) {
return val !== false
} else {
return val === true || val === 'suppress-warning'
}
}
export function assertCompatEnabled(key: DeprecationTypes, ...args: any[]) {
if (!isCompatEnabled(key)) {
throw new Error(`${key} compat has been disabled.`)
} else if (__DEV__) {
warnDeprecation(key, ...args)
}
}
export function softAssertCompatEnabled(key: DeprecationTypes, ...args: any[]) {
if (__DEV__) {
warnDeprecation(key, ...args)
}
return isCompatEnabled(key)
2021-04-08 00:24:45 +08:00
}
2021-04-09 04:33:53 +08:00
// disable features that conflict with v3 behavior
if (__TEST__) {
configureCompat({
COMPONENT_ASYNC: false,
COMPONENT_FUNCTIONAL: false,
WATCH_ARRAY: false,
INSTANCE_ATTRS_CLASS_STYLE: false
2021-04-09 04:33:53 +08:00
})
}