import type { InjectionKey, Ref } from 'vue'; import { inject as vueInject, provide as vueProvide } from 'vue'; import type { Org, OrgPermissions, Pipeline, PipelineConfig, Repo } from '~/lib/api/types'; import type { Tab } from './useTabs'; export interface InjectKeys { repo: Ref; org: Ref; 'org-permissions': Ref; pipeline: Ref; 'pipeline-configs': Ref; tabs: Ref; } export function inject(key: T): InjectKeys[T] { const value = vueInject(key); if (value === undefined) { throw new Error(`Please provide a value for ${key}`); } return value; } export function provide(key: T, value: InjectKeys[T]): void { return vueProvide(key, value as T extends InjectionKey ? V : InjectKeys[T]); }