import { getHighlighterCore } from 'shiki/core'; import type { HighlighterCore } from 'shiki/core'; import getWasm from 'shiki/wasm'; import { LANGUAGES, DEFAULT_THEME } from '@/shiki.config.mjs'; // This creates a memoized minimal Shikiji Syntax Highlighter export const getShiki = () => getHighlighterCore({ themes: [DEFAULT_THEME], langs: LANGUAGES, loadWasm: getWasm, }); export const highlightToHtml = (shiki: HighlighterCore) => (code: string, language: string) => // Shiki will always return the Highlighted code encapsulated in a
and tag
// since our own CodeBox component handles the tag, we just want to extract
// the inner highlighted code to the CodeBox
shiki
.codeToHtml(code, { lang: language, theme: DEFAULT_THEME })
.match(/(.+?)<\/code>/s)![1];
export const highlightToHast =
(shiki: HighlighterCore) => (code: string, language: string) =>
shiki.codeToHast(code, { lang: language, theme: DEFAULT_THEME });