import { getSharedHighlighter, type DiffsHighlighter, type SupportedLanguages, } from "@pierre/diffs"; import { resolveDiffThemeName } from "./diffRendering"; const highlighterPromiseCache = new Map>(); export function getSyntaxHighlighterPromise(language: string): Promise { const cached = highlighterPromiseCache.get(language); if (cached) return cached; const promise = getSharedHighlighter({ themes: [resolveDiffThemeName("dark"), resolveDiffThemeName("light")], langs: [language as SupportedLanguages], preferredHighlighter: "shiki-js", }).catch((error) => { if (language === "text") { highlighterPromiseCache.delete(language); // "text" itself failed — Shiki cannot initialize at all, surface the error throw error; } // Language not supported by Shiki — fall back to "text" return getSyntaxHighlighterPromise("text"); }); highlighterPromiseCache.set(language, promise); return promise; }