From 32b51249bff70d1e03a3f9193f5a42461974daa6 Mon Sep 17 00:00:00 2001 From: Julian Meinking <12785972+DrJume@users.noreply.github.com> Date: Wed, 26 Oct 2022 11:54:10 +0200 Subject: [PATCH] fix(runtime-core): `in` operator returning `false` for built-in instance properties in `exposeProxy` (#6138) fix #6137 --- packages/runtime-core/__tests__/apiExpose.spec.ts | 7 ++++++- packages/runtime-core/src/component.ts | 3 +++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/__tests__/apiExpose.spec.ts b/packages/runtime-core/__tests__/apiExpose.spec.ts index 1235096b016..1bfd513943b 100644 --- a/packages/runtime-core/__tests__/apiExpose.spec.ts +++ b/packages/runtime-core/__tests__/apiExpose.spec.ts @@ -203,7 +203,9 @@ describe('api: expose', () => { return h('div') }, setup(_, { expose }) { - expose() + expose({ + foo: 42 + }) return () => h(GrandChild, { ref: grandChildRef }) } }) @@ -216,7 +218,10 @@ describe('api: expose', () => { } const root = nodeOps.createElement('div') render(h(Parent), root) + expect('$el' in childRef.value).toBe(true) expect(childRef.value.$el.tag).toBe('div') + expect('foo' in childRef.value).toBe(true) + expect('$parent' in grandChildRef.value).toBe(true) expect(grandChildRef.value.$parent).toBe(childRef.value) expect(grandChildRef.value.$parent.$parent).toBe(grandChildRef.value.$root) }) diff --git a/packages/runtime-core/src/component.ts b/packages/runtime-core/src/component.ts index c70a6f87411..68f10a669b3 100644 --- a/packages/runtime-core/src/component.ts +++ b/packages/runtime-core/src/component.ts @@ -945,6 +945,9 @@ export function getExposeProxy(instance: ComponentInternalInstance) { } else if (key in publicPropertiesMap) { return publicPropertiesMap[key](instance) } + }, + has(target, key: string) { + return key in target || key in publicPropertiesMap } })) )