30 lines · 1021 B · TypeScript
RawDownload
import {  getSharedHighlighter,  type DiffsHighlighter,  type SupportedLanguages,} from "@pierre/diffs"; import { resolveDiffThemeName } from "./diffRendering"; const highlighterPromiseCache = new Map<string, Promise<DiffsHighlighter>>(); export function getSyntaxHighlighterPromise(language: string): Promise<DiffsHighlighter> {  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;}