import { createHighlighter } from 'shiki'; import type { Highlighter } from 'shiki'; let highlighterPromise: Promise | null = null; function getHighlighter(): Promise { if (!highlighterPromise) { highlighterPromise = createHighlighter({ themes: ['github-light', 'github-dark'], langs: ['typescript', 'vue', 'json', 'bash'], }); } return highlighterPromise; } export function useShiki() { const highlighted = ref(''); const isReady = ref(false); async function highlight(code: string, lang: string = 'typescript'): Promise { const highlighter = await getHighlighter(); return highlighter.codeToHtml(code, { lang, themes: { light: 'github-light', dark: 'github-dark', }, }); } async function highlightReactive(code: string, lang: string = 'typescript'): Promise { highlighted.value = await highlight(code, lang); isReady.value = true; } return { highlight, highlighted, highlightReactive, isReady, }; }