DeprecationTypes,
assertCompatEnabled,
isCompatEnabled,
+ warnDeprecation,
} from './compatConfig'
import { off, on, once } from './instanceEventEmitter'
import { getCompatListeners } from './instanceListeners'
$children: getCompatChildren,
$listeners: getCompatListeners,
+
+ // inject additional properties into $options for compat
+ // e.g. vuex needs this.$options.parent
+ $options: i => {
+ if (!isCompatEnabled(DeprecationTypes.PRIVATE_APIS, i)) {
+ return resolveMergedOptions(i)
+ }
+ if (i.resolvedOptions) {
+ return i.resolvedOptions
+ }
+ const res = (i.resolvedOptions = extend({}, resolveMergedOptions(i)))
+ Object.defineProperties(res, {
+ parent: {
+ get() {
+ warnDeprecation(DeprecationTypes.PRIVATE_APIS, i, '$options.parent')
+ return i.proxy!.$parent
+ },
+ },
+ propsData: {
+ get() {
+ warnDeprecation(
+ DeprecationTypes.PRIVATE_APIS,
+ i,
+ '$options.propsData',
+ )
+ return i.vnode.props
+ },
+ },
+ })
+ return res
+ },
} as PublicPropertiesMap)
- /* istanbul ignore if */
- if (isCompatEnabled(DeprecationTypes.PRIVATE_APIS, null)) {
- extend(map, {
- // needed by many libs / render fns
- $vnode: i => i.vnode,
-
- // inject additional properties into $options for compat
- // e.g. vuex needs this.$options.parent
- $options: i => {
- const res = extend({}, resolveMergedOptions(i))
- res.parent = i.proxy!.$parent
- res.propsData = i.vnode.props
- return res
- },
-
- // some private properties that are likely accessed...
- _self: i => i.proxy,
- _uid: i => i.uid,
- _data: i => i.data,
- _isMounted: i => i.isMounted,
- _isDestroyed: i => i.isUnmounted,
-
- // v2 render helpers
- $createElement: () => compatH,
- _c: () => compatH,
- _o: () => legacyMarkOnce,
- _n: () => looseToNumber,
- _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)
+ const privateAPIs = {
+ // needed by many libs / render fns
+ $vnode: i => i.vnode,
+
+ // some private properties that are likely accessed...
+ _self: i => i.proxy,
+ _uid: i => i.uid,
+ _data: i => i.data,
+ _isMounted: i => i.isMounted,
+ _isDestroyed: i => i.isUnmounted,
+
+ // v2 render helpers
+ $createElement: () => compatH,
+ _c: () => compatH,
+ _o: () => legacyMarkOnce,
+ _n: () => looseToNumber,
+ _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
+
+ for (const key in privateAPIs) {
+ map[key] = i => {
+ if (isCompatEnabled(DeprecationTypes.PRIVATE_APIS, i)) {
+ return privateAPIs[key](i)
+ }
+ }
}
}