ExtractComputedReturns<C> &
M
+const publicPropertiesMap = {
+ $data: 'data',
+ $props: 'propsProxy',
+ $attrs: 'attrs',
+ $slots: 'slots',
+ $refs: 'refs',
+ $parent: 'parent',
+ $root: 'root',
+ $emit: 'emit',
+ $options: 'type'
+}
+
export const PublicInstanceProxyHandlers = {
get(target: ComponentInternalInstance, key: string) {
const { renderContext, data, props, propsProxy } = target
} else if (hasOwn(props, key)) {
// return the value from propsProxy for ref unwrapping and readonly
return propsProxy![key]
- } else {
- // TODO simplify this?
+ } else if (key === '$el') {
+ return target.vnode.el
+ } else if (hasOwn(publicPropertiesMap, key)) {
+ return target[publicPropertiesMap[key]]
+ }
+ // methods are only exposed when options are supported
+ if (__FEATURE_OPTIONS__) {
switch (key) {
- case '$data':
- return data
- case '$props':
- return propsProxy
- case '$attrs':
- return target.attrs
- case '$slots':
- return target.slots
- case '$refs':
- return target.refs
- case '$parent':
- return target.parent
- case '$root':
- return target.root
- case '$emit':
- return target.emit
- case '$el':
- return target.vnode.el
- case '$options':
- return target.type
- default:
- // methods are only exposed when options are supported
- if (__FEATURE_OPTIONS__) {
- switch (key) {
- case '$forceUpdate':
- return target.update
- case '$nextTick':
- return nextTick
- case '$watch':
- return instanceWatch.bind(target)
- }
- }
- return target.user[key]
+ case '$forceUpdate':
+ return target.update
+ case '$nextTick':
+ return nextTick
+ case '$watch':
+ return instanceWatch.bind(target)
}
}
+ return target.user[key]
},
// this trap is only called in browser-compiled render functions that use
// `with (this) {}`