import { Directive } from './directives'
import {
CreateComponentPublicInstance,
- ComponentPublicInstance
+ ComponentPublicInstance,
+ isReservedPrefix
} from './componentPublicInstance'
import { warn } from './warning'
import { VNodeChild } from './vnode'
for (const key in data) {
checkDuplicateProperties!(OptionTypes.DATA, key)
// expose data on ctx during dev
- if (key[0] !== '$' && key[0] !== '_') {
+ if (!isReservedPrefix(key[0])) {
Object.defineProperty(ctx, key, {
configurable: true,
enumerable: true,
_: ComponentInternalInstance
}
+export const isReservedPrefix = (key: string) => key === '_' || key === '$'
+
export const PublicInstanceProxyHandlers: ProxyHandler<any> = {
get({ _: instance }: ComponentRenderContext, key: string) {
const { ctx, setupState, data, props, accessCache, type, appContext } =
// to infinite warning loop
key.indexOf('__v') !== 0)
) {
- if (
- data !== EMPTY_OBJ &&
- (key[0] === '$' || key[0] === '_') &&
- hasOwn(data, key)
- ) {
+ if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
warn(
`Property ${JSON.stringify(
key
const { ctx, setupState } = instance
Object.keys(toRaw(setupState)).forEach(key => {
if (!setupState.__isScriptSetup) {
- if (key[0] === '$' || key[0] === '_') {
+ if (isReservedPrefix(key[0])) {
warn(
`setup() return property ${JSON.stringify(
key