From 7a1a782642a13d5fcc6b8c738a5ce8f8c657e1b5 Mon Sep 17 00:00:00 2001 From: hiroki Date: Mon, 30 Nov 2020 16:36:02 -0500 Subject: [PATCH] fix(provide): support symbols in applyOptions (#2616) fix #2615 --- .../runtime-core/__tests__/apiOptions.spec.ts | 18 +++++++++++++++--- packages/runtime-core/src/apiInject.ts | 2 +- packages/runtime-core/src/componentOptions.ts | 4 ++-- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/runtime-core/__tests__/apiOptions.spec.ts b/packages/runtime-core/__tests__/apiOptions.spec.ts index ab60ac7ca82..d60842db450 100644 --- a/packages/runtime-core/__tests__/apiOptions.spec.ts +++ b/packages/runtime-core/__tests__/apiOptions.spec.ts @@ -251,6 +251,7 @@ describe('api: options', () => { }) test('provide/inject', () => { + const symbolKey = Symbol() const Root = defineComponent({ data() { return { @@ -259,7 +260,8 @@ describe('api: options', () => { }, provide() { return { - a: this.a + a: this.a, + [symbolKey]: 2 } }, render() { @@ -271,7 +273,9 @@ describe('api: options', () => { h(ChildE), h(ChildF), h(ChildG), - h(ChildH) + h(ChildH), + h(ChildI), + h(ChildJ) ] } }) @@ -321,7 +325,15 @@ describe('api: options', () => { default: () => 5 } }) - expect(renderToString(h(Root))).toBe(`11112345`) + const ChildI = defineChild({ + b: symbolKey + }) + const ChildJ = defineChild({ + b: { + from: symbolKey + } + }) + expect(renderToString(h(Root))).toBe(`1111234522`) }) test('provide accessing data in extends', () => { diff --git a/packages/runtime-core/src/apiInject.ts b/packages/runtime-core/src/apiInject.ts index 186b411b241..402113cd1b1 100644 --- a/packages/runtime-core/src/apiInject.ts +++ b/packages/runtime-core/src/apiInject.ts @@ -5,7 +5,7 @@ import { warn } from './warning' export interface InjectionKey extends Symbol {} -export function provide(key: InjectionKey | string, value: T) { +export function provide(key: InjectionKey | string | number, value: T) { if (!currentInstance) { if (__DEV__) { warn(`provide() can only be used inside setup().`) diff --git a/packages/runtime-core/src/componentOptions.ts b/packages/runtime-core/src/componentOptions.ts index 89bd8c06053..76e61a44ed4 100644 --- a/packages/runtime-core/src/componentOptions.ts +++ b/packages/runtime-core/src/componentOptions.ts @@ -667,9 +667,9 @@ export function applyOptions( const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions - for (const key in provides) { + Reflect.ownKeys(provides).forEach(key => { provide(key, provides[key]) - } + }) }) }