import hljs from 'highlight.js/lib/core'; import bash from 'highlight.js/lib/languages/bash'; import css from 'highlight.js/lib/languages/css'; import diff from 'highlight.js/lib/languages/diff'; import javascript from 'highlight.js/lib/languages/javascript'; import json from 'highlight.js/lib/languages/json'; import markdown from 'highlight.js/lib/languages/markdown'; import php from 'highlight.js/lib/languages/php'; import python from 'highlight.js/lib/languages/python'; import sql from 'highlight.js/lib/languages/sql'; import typescript from 'highlight.js/lib/languages/typescript'; import xml from 'highlight.js/lib/languages/xml'; import yaml from 'highlight.js/lib/languages/yaml'; import { escapeHtml } from './escapeHtml'; hljs.registerLanguage('bash', bash); hljs.registerLanguage('css', css); hljs.registerLanguage('diff', diff); hljs.registerLanguage('javascript', javascript); hljs.registerLanguage('json', json); hljs.registerLanguage('markdown', markdown); hljs.registerLanguage('php', php); hljs.registerLanguage('python', python); hljs.registerLanguage('sql', sql); hljs.registerLanguage('typescript', typescript); hljs.registerLanguage('xml', xml); hljs.registerLanguage('yaml', yaml); const languageAliases: Record = { cjs: 'javascript', html: 'xml', js: 'javascript', jsx: 'javascript', md: 'markdown', shell: 'bash', sh: 'bash', ts: 'typescript', tsx: 'typescript', yml: 'yaml', zsh: 'bash', }; export const highlightCode = (content: string, language: string) => { const normalized = languageAliases[language] ?? language; if (!hljs.getLanguage(normalized)) { return escapeHtml(content); } return hljs.highlight(content, { language: normalized, ignoreIllegals: true, }).value; };