import { AppConfig } from '../apiCreateApp' import { DeprecationTypes, softAssertCompatEnabled, warnDeprecation } from './compatConfig' import { isCopyingConfig } from './global' import { internalOptionMergeStrats } from '../componentOptions' // legacy config warnings export type LegacyConfig = { /** * @deprecated `config.silent` option has been removed */ silent?: boolean /** * @deprecated use __VUE_PROD_DEVTOOLS__ compile-time feature flag instead * https://github.com/vuejs/core/tree/main/packages/vue#bundler-build-feature-flags */ devtools?: boolean /** * @deprecated use `config.isCustomElement` instead * https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-ignoredelements-is-now-config-iscustomelement */ ignoredElements?: (string | RegExp)[] /** * @deprecated * https://v3-migration.vuejs.org/breaking-changes/keycode-modifiers.html */ keyCodes?: Record /** * @deprecated * https://v3-migration.vuejs.org/breaking-changes/global-api.html#config-productiontip-removed */ productionTip?: boolean } // dev only export function installLegacyConfigWarnings(config: AppConfig) { const legacyConfigOptions: Record = { silent: DeprecationTypes.CONFIG_SILENT, devtools: DeprecationTypes.CONFIG_DEVTOOLS, ignoredElements: DeprecationTypes.CONFIG_IGNORED_ELEMENTS, keyCodes: DeprecationTypes.CONFIG_KEY_CODES, productionTip: DeprecationTypes.CONFIG_PRODUCTION_TIP } Object.keys(legacyConfigOptions).forEach(key => { let val = (config as any)[key] Object.defineProperty(config, key, { enumerable: true, get() { return val }, set(newVal) { if (!isCopyingConfig) { warnDeprecation(legacyConfigOptions[key], null) } val = newVal } }) }) } export function installLegacyOptionMergeStrats(config: AppConfig) { config.optionMergeStrategies = new Proxy({} as any, { get(target, key) { if (key in target) { return target[key] } if ( key in internalOptionMergeStrats && softAssertCompatEnabled( DeprecationTypes.CONFIG_OPTION_MERGE_STRATS, null ) ) { return internalOptionMergeStrats[ key as keyof typeof internalOptionMergeStrats ] } } }) }