| 12 | export interface InjectionKey<T> extends Symbol {} |
| 13 | |
| 14 | function resolveInject( |
| 15 | provideKey: InjectionKey<any> | string, |
| 16 | vm: ComponentInstance |
| 17 | ): any { |
| 18 | let source = vm |
| 19 | while (source) { |
| 20 | if (source._provided && hasOwn(source._provided, provideKey as PropertyKey)) { |
| 21 | return source._provided[provideKey as PropertyKey] |
| 22 | } |
| 23 | source = source.$parent |
| 24 | } |
| 25 | |
| 26 | return NOT_FOUND |
| 27 | } |
| 28 | |
| 29 | export function provide<T>(key: InjectionKey<T> | string, value: T): void { |
| 30 | const vm = getCurrentInstanceForFn('provide')?.proxy |