diff --git a/packages/runtime-core/src/compat/compatConfig.ts b/packages/runtime-core/src/compat/compatConfig.ts index 40655111ca2..f8a4b52ea10 100644 --- a/packages/runtime-core/src/compat/compatConfig.ts +++ b/packages/runtime-core/src/compat/compatConfig.ts @@ -58,7 +58,9 @@ export const enum DeprecationTypes { RENDER_FUNCTION = 'RENDER_FUNCTION', - FILTERS = 'FILTERS' + FILTERS = 'FILTERS', + + PRIVATE_APIS = 'PRIVATE_APIS' } type DeprecationData = { @@ -404,6 +406,13 @@ const deprecationData: Record = { `The "|" symbol will be treated as native JavaScript bitwise OR operator. ` + `Use method calls or computed properties instead.`, link: `https://v3.vuejs.org/guide/migration/filters.html` + }, + + [DeprecationTypes.PRIVATE_APIS]: { + message: name => + `"${name}" is a Vue 2 private API that no longer exists in Vue 3. ` + + `If you are seeing this warning only due to a dependency, you can ` + + `suppress this warning via { PRIVATE_APIS: 'supress-warning' }.` } } diff --git a/packages/runtime-core/src/compat/instance.ts b/packages/runtime-core/src/compat/instance.ts index b105aafc6da..208825cca74 100644 --- a/packages/runtime-core/src/compat/instance.ts +++ b/packages/runtime-core/src/compat/instance.ts @@ -91,40 +91,44 @@ export function installCompatInstanceProperties(map: PublicPropertiesMap) { $off: i => off.bind(null, i), $children: getCompatChildren, - $listeners: getCompatListeners, + $listeners: getCompatListeners + } as PublicPropertiesMap) - $vnode: i => i.vnode, + if (isCompatEnabled(DeprecationTypes.PRIVATE_APIS, null)) { + extend(map, { + $vnode: i => i.vnode, - // inject addtional properties into $options for compat - $options: i => { - let res = resolveMergedOptions(i) - if (res === i.type) res = i.type.__merged = extend({}, res) - res.parent = i.proxy!.$parent - res.propsData = i.vnode.props - return res - }, + // inject addtional properties into $options for compat + $options: i => { + let res = resolveMergedOptions(i) + if (res === i.type) res = i.type.__merged = extend({}, res) + res.parent = i.proxy!.$parent + res.propsData = i.vnode.props + return res + }, - // v2 render helpers - $createElement: () => compatH, - _self: i => i.proxy, - _uid: i => i.uid, - _c: () => compatH, - _o: () => legacyMarkOnce, - _n: () => toNumber, - _s: () => toDisplayString, - _l: () => renderList, - _t: i => legacyRenderSlot.bind(null, i), - _q: () => looseEqual, - _i: () => looseIndexOf, - _m: i => legacyRenderStatic.bind(null, i), - _f: () => resolveFilter, - _k: i => legacyCheckKeyCodes.bind(null, i), - _b: () => legacyBindObjectProps, - _v: () => createTextVNode, - _e: () => createCommentVNode, - _u: () => legacyresolveScopedSlots, - _g: () => legacyBindObjectListeners, - _d: () => legacyBindDynamicKeys, - _p: () => legacyPrependModifier - } as PublicPropertiesMap) + // v2 render helpers + $createElement: () => compatH, + _self: i => i.proxy, + _uid: i => i.uid, + _c: () => compatH, + _o: () => legacyMarkOnce, + _n: () => toNumber, + _s: () => toDisplayString, + _l: () => renderList, + _t: i => legacyRenderSlot.bind(null, i), + _q: () => looseEqual, + _i: () => looseIndexOf, + _m: i => legacyRenderStatic.bind(null, i), + _f: () => resolveFilter, + _k: i => legacyCheckKeyCodes.bind(null, i), + _b: () => legacyBindObjectProps, + _v: () => createTextVNode, + _e: () => createCommentVNode, + _u: () => legacyresolveScopedSlots, + _g: () => legacyBindObjectListeners, + _d: () => legacyBindDynamicKeys, + _p: () => legacyPrependModifier + } as PublicPropertiesMap) + } } diff --git a/packages/runtime-core/src/compat/renderFn.ts b/packages/runtime-core/src/compat/renderFn.ts index 5fc574b0ce4..7f69c64e9f1 100644 --- a/packages/runtime-core/src/compat/renderFn.ts +++ b/packages/runtime-core/src/compat/renderFn.ts @@ -310,7 +310,11 @@ function convertLegacySlots(vnode: VNode): VNode { export function defineLegacyVNodeProperties(vnode: VNode) { if ( - isCompatEnabled(DeprecationTypes.RENDER_FUNCTION, currentRenderingInstance) + isCompatEnabled( + DeprecationTypes.RENDER_FUNCTION, + currentRenderingInstance + ) && + isCompatEnabled(DeprecationTypes.PRIVATE_APIS, currentRenderingInstance) ) { const context = currentRenderingInstance const getInstance = () => vnode.component && vnode.component.proxy