fix(compat): handle and warn config.optionMergeStrategies
This commit is contained in:
parent
ed6c5fe903
commit
94e69fd389
@ -26,6 +26,7 @@ export const enum DeprecationTypes {
|
|||||||
CONFIG_PRODUCTION_TIP = 'CONFIG_PRODUCTION_TIP',
|
CONFIG_PRODUCTION_TIP = 'CONFIG_PRODUCTION_TIP',
|
||||||
CONFIG_IGNORED_ELEMENTS = 'CONFIG_IGNORED_ELEMENTS',
|
CONFIG_IGNORED_ELEMENTS = 'CONFIG_IGNORED_ELEMENTS',
|
||||||
CONFIG_WHITESPACE = 'CONFIG_WHITESPACE',
|
CONFIG_WHITESPACE = 'CONFIG_WHITESPACE',
|
||||||
|
CONFIG_OPTION_MERGE_STRATS = 'CONFIG_OPTION_MERGE_STRATS',
|
||||||
|
|
||||||
INSTANCE_SET = 'INSTANCE_SET',
|
INSTANCE_SET = 'INSTANCE_SET',
|
||||||
INSTANCE_DELETE = 'INSTANCE_DELETE',
|
INSTANCE_DELETE = 'INSTANCE_DELETE',
|
||||||
@ -174,6 +175,12 @@ export const deprecationData: Record<DeprecationTypes, DeprecationData> = {
|
|||||||
`\`config.compilerOptions.whitespace\`.`
|
`\`config.compilerOptions.whitespace\`.`
|
||||||
},
|
},
|
||||||
|
|
||||||
|
[DeprecationTypes.CONFIG_OPTION_MERGE_STRATS]: {
|
||||||
|
message:
|
||||||
|
`config.optionMergeStrategies no longer exposes internal strategies. ` +
|
||||||
|
`Use custom merge functions instead.`
|
||||||
|
},
|
||||||
|
|
||||||
[DeprecationTypes.INSTANCE_SET]: {
|
[DeprecationTypes.INSTANCE_SET]: {
|
||||||
message:
|
message:
|
||||||
`vm.$set() has been removed as it is no longer needed in Vue 3. ` +
|
`vm.$set() has been removed as it is no longer needed in Vue 3. ` +
|
||||||
|
@ -41,7 +41,8 @@ import { Directive } from '../directives'
|
|||||||
import { nextTick } from '../scheduler'
|
import { nextTick } from '../scheduler'
|
||||||
import { version } from '..'
|
import { version } from '..'
|
||||||
import {
|
import {
|
||||||
installLegacyConfigProperties,
|
installLegacyConfigWarnings,
|
||||||
|
installLegacyOptionMergeStrats,
|
||||||
LegacyConfig,
|
LegacyConfig,
|
||||||
legacyOptionMergeStrats
|
legacyOptionMergeStrats
|
||||||
} from './globalConfig'
|
} from './globalConfig'
|
||||||
@ -327,6 +328,7 @@ export function installAppCompatProperties(
|
|||||||
render: RootRenderFunction
|
render: RootRenderFunction
|
||||||
) {
|
) {
|
||||||
installFilterMethod(app, context)
|
installFilterMethod(app, context)
|
||||||
|
installLegacyOptionMergeStrats(app.config)
|
||||||
|
|
||||||
if (!singletonApp) {
|
if (!singletonApp) {
|
||||||
// this is the call of creating the singleton itself so the rest is
|
// this is the call of creating the singleton itself so the rest is
|
||||||
@ -337,7 +339,7 @@ export function installAppCompatProperties(
|
|||||||
installCompatMount(app, context, render)
|
installCompatMount(app, context, render)
|
||||||
installLegacyAPIs(app)
|
installLegacyAPIs(app)
|
||||||
applySingletonAppMutations(app)
|
applySingletonAppMutations(app)
|
||||||
if (__DEV__) installLegacyConfigProperties(app.config)
|
if (__DEV__) installLegacyConfigWarnings(app.config)
|
||||||
}
|
}
|
||||||
|
|
||||||
function installFilterMethod(app: App, context: AppContext) {
|
function installFilterMethod(app: App, context: AppContext) {
|
||||||
|
@ -1,7 +1,11 @@
|
|||||||
import { extend, isArray } from '@vue/shared'
|
import { extend, isArray } from '@vue/shared'
|
||||||
import { AppConfig } from '../apiCreateApp'
|
import { AppConfig } from '../apiCreateApp'
|
||||||
import { mergeDataOption } from './data'
|
import { mergeDataOption } from './data'
|
||||||
import { DeprecationTypes, warnDeprecation } from './compatConfig'
|
import {
|
||||||
|
DeprecationTypes,
|
||||||
|
softAssertCompatEnabled,
|
||||||
|
warnDeprecation
|
||||||
|
} from './compatConfig'
|
||||||
import { isCopyingConfig } from './global'
|
import { isCopyingConfig } from './global'
|
||||||
|
|
||||||
// legacy config warnings
|
// legacy config warnings
|
||||||
@ -33,7 +37,7 @@ export type LegacyConfig = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// dev only
|
// dev only
|
||||||
export function installLegacyConfigProperties(config: AppConfig) {
|
export function installLegacyConfigWarnings(config: AppConfig) {
|
||||||
const legacyConfigOptions: Record<string, DeprecationTypes> = {
|
const legacyConfigOptions: Record<string, DeprecationTypes> = {
|
||||||
silent: DeprecationTypes.CONFIG_SILENT,
|
silent: DeprecationTypes.CONFIG_SILENT,
|
||||||
devtools: DeprecationTypes.CONFIG_DEVTOOLS,
|
devtools: DeprecationTypes.CONFIG_DEVTOOLS,
|
||||||
@ -57,11 +61,27 @@ export function installLegacyConfigProperties(config: AppConfig) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// Internal merge strats which are no longer needed in v3, but we need to
|
export function installLegacyOptionMergeStrats(config: AppConfig) {
|
||||||
// expose them because some v2 plugins will reuse these internal strats to
|
config.optionMergeStrategies = new Proxy({} as any, {
|
||||||
// merge their custom options.
|
get(target, key) {
|
||||||
extend(config.optionMergeStrategies, legacyOptionMergeStrats)
|
if (key in target) {
|
||||||
|
return target[key]
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
key in legacyOptionMergeStrats &&
|
||||||
|
softAssertCompatEnabled(
|
||||||
|
DeprecationTypes.CONFIG_OPTION_MERGE_STRATS,
|
||||||
|
null
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
return legacyOptionMergeStrats[
|
||||||
|
key as keyof typeof legacyOptionMergeStrats
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export const legacyOptionMergeStrats = {
|
export const legacyOptionMergeStrats = {
|
||||||
|
@ -321,6 +321,7 @@ Features that start with `COMPILER_` are compiler-specific: if you are using the
|
|||||||
| GLOBAL_OBSERVABLE | ● | `Vue.observable` removed (use `reactive`) | [link](https://v3.vuejs.org/api/basic-reactivity.html) |
|
| GLOBAL_OBSERVABLE | ● | `Vue.observable` removed (use `reactive`) | [link](https://v3.vuejs.org/api/basic-reactivity.html) |
|
||||||
| CONFIG_KEY_CODES | ● | config.keyCodes rmeoved | [link](https://v3.vuejs.org/guide/migration/keycode-modifiers.html) |
|
| CONFIG_KEY_CODES | ● | config.keyCodes rmeoved | [link](https://v3.vuejs.org/guide/migration/keycode-modifiers.html) |
|
||||||
| CONFIG_WHITESPACE | ● | In Vue 3 whitespace defaults to `"condense"` | |
|
| CONFIG_WHITESPACE | ● | In Vue 3 whitespace defaults to `"condense"` | |
|
||||||
|
| CONFIG_OPTION_MERGE_STRATS | ● | Vue 3 no longer exposes internal option merge strats | |
|
||||||
| INSTANCE_SET | ● | `vm.$set` removed (no longer needed) | |
|
| INSTANCE_SET | ● | `vm.$set` removed (no longer needed) | |
|
||||||
| INSTANCE_DELETE | ● | `vm.$delete` removed (no longer needed) | |
|
| INSTANCE_DELETE | ● | `vm.$delete` removed (no longer needed) | |
|
||||||
| INSTANCE_EVENT_EMITTER | ● | `vm.$on`, `vm.$off`, `vm.$once` removed | [link](https://v3.vuejs.org/guide/migration/events-api.html) |
|
| INSTANCE_EVENT_EMITTER | ● | `vm.$on`, `vm.$off`, `vm.$once` removed | [link](https://v3.vuejs.org/guide/migration/events-api.html) |
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
import Vue from '@vue/compat'
|
import Vue from '@vue/compat'
|
||||||
import { toggleDeprecationWarning } from '../../runtime-core/src/compat/compatConfig'
|
import {
|
||||||
|
DeprecationTypes,
|
||||||
|
toggleDeprecationWarning
|
||||||
|
} from '../../runtime-core/src/compat/compatConfig'
|
||||||
import { createApp } from '../src/esm-index'
|
import { createApp } from '../src/esm-index'
|
||||||
import { triggerEvent } from './utils'
|
import { triggerEvent } from './utils'
|
||||||
|
|
||||||
@ -74,3 +77,9 @@ test('singleton config should affect apps created with createApp()', () => {
|
|||||||
}).mount(el)
|
}).mount(el)
|
||||||
expect(el.innerHTML).toBe(`<v-foo></v-foo><foo></foo>`)
|
expect(el.innerHTML).toBe(`<v-foo></v-foo><foo></foo>`)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('config.optionMergeStrategies', () => {
|
||||||
|
toggleDeprecationWarning(true)
|
||||||
|
expect(typeof Vue.config.optionMergeStrategies.created).toBe('function')
|
||||||
|
expect(DeprecationTypes.CONFIG_OPTION_MERGE_STRATS).toHaveBeenWarned()
|
||||||
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user