UNPKG

nk-cli

Version:

Initialize a vite app fast by NK-CLI

46 lines (38 loc) 1.04 kB
import { InjectionKey, provide, inject, reactive, readonly as defineReadonly, // defineComponent, UnwrapRef, } from 'vue'; export interface CreateContextOptions { readonly?: boolean; createProvider?: boolean; native?: boolean; } type ShallowUnwrap<T> = { [P in keyof T]: UnwrapRef<T[P]>; }; export function createContext<T>( context: any, key: InjectionKey<T> = Symbol(), options: CreateContextOptions = {}, ) { const { readonly = true, createProvider = false, native = false } = options; const state = reactive(context); const provideData = readonly ? defineReadonly(state) : state; !createProvider && provide(key, native ? context : provideData); return { state, }; } export function useContext<T>(key: InjectionKey<T>, native?: boolean): T; export function useContext<T>(key: InjectionKey<T>, defaultValue?: any, native?: boolean): T; export function useContext<T>( key: InjectionKey<T> = Symbol(), defaultValue?: any, ): ShallowUnwrap<T> { return inject(key, defaultValue || {}); }