import { getMdcConfigs } from '#mdc-configs' import { createOnigurumaEngine } from 'shiki/engine/oniguruma' import { createJavaScriptRegexEngine } from "shiki/engine/javascript"; export function createShikiHighlighter({ langs = [], themes = [], bundledLangs = {}, bundledThemes = {}, getMdcConfigs, options: shikiOptions, engine } = {}) { let shiki; let configs; async function _getShiki() { const { createHighlighterCore, addClassToHast, isSpecialLang, isSpecialTheme } = await import("shiki/core"); const { transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight } = await import("@shikijs/transformers"); const shiki2 = await createHighlighterCore({ langs, themes, engine: engine || createJavaScriptRegexEngine() }); for await (const config of await getConfigs()) { await config.shiki?.setup?.(shiki2); } return { shiki: shiki2, addClassToHast, isSpecialLang, isSpecialTheme, transformers: [ transformerNotationDiff(), transformerNotationErrorLevel(), transformerNotationFocus(), transformerNotationHighlight() ] }; } async function getShiki() { if (!shiki) { shiki = _getShiki(); } return shiki; } async function getConfigs() { if (!configs) { configs = Promise.resolve(getMdcConfigs?.() || []); } return configs; } const highlighter = async (code, lang, theme, options = {}) => { const { shiki: shiki2, addClassToHast, isSpecialLang, isSpecialTheme, transformers: baseTransformers } = await getShiki(); const codeToHastOptions = { defaultColor: false, meta: { __raw: options.meta } }; if (lang === "ts-type" || lang === "typescript-type") { lang = "typescript"; codeToHastOptions.grammarContextCode = "let a:"; } else if (lang === "vue-html" || lang === "vue-template") { lang = "vue"; codeToHastOptions.grammarContextCode = "