Files
robonen 96ac895f7a chore(docs): eslint migration + extractor updates
Migrate docs to eslint flat config (build-script console override); doc
extractor points at configs/eslint.
2026-06-07 16:30:14 +07:00

43 lines
1.0 KiB
TypeScript

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