/
ShamilS
/
claude-code
Обзор
Документация
Войти
/
ShamilS
/
claude-code
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
utils/cliHighlight.ts
54 строки
2 KB
kuberwastaken
new initial commit (history rewritten)
01 апр 2026, 14:57
01 апр 2026, 14:57
c1996f2
Код
Авторство
О чём код?
// highlight.js's type defs carry `/// <reference lib="dom" />`. SSETransport, // mcp/client, ssh, dumpPrompts use DOM types (TextDecodeOptions, RequestInfo) // that only typecheck because this file's `typeof import('highlight.js')` pulls // lib.dom in. tsconfig has lib: ["ESNext"] only — fixing the actual DOM-type // deps is a separate sweep; this ref preserves the status quo. /// <reference lib="dom" /> import { extname } from 'path' export type CliHighlight = { highlight: typeof import('cli-highlight').highlight supportsLanguage: typeof import('cli-highlight').supportsLanguage } // One promise shared by Fallback.tsx, markdown.ts, events.ts, getLanguageName. // The highlight.js import piggybacks: cli-highlight has already pulled it into // the module cache, so the second import() is a cache hit — no extra bytes // faulted in. let cliHighlightPromise: Promise<CliHighlight | null> | undefined let loadedGetLanguage: typeof import('highlight.js').getLanguage | undefined async function loadCliHighlight(): Promise<CliHighlight | null> { try { const cliHighlight = await import('cli-highlight') // cache hit — cli-highlight already loaded highlight.js const highlightJs = await import('highlight.js') loadedGetLanguage = highlightJs.getLanguage return { highlight: cliHighlight.highlight, supportsLanguage: cliHighlight.supportsLanguage, } } catch { return null } } export function getCliHighlightPromise(): Promise<CliHighlight | null> { cliHighlightPromise ??= loadCliHighlight() return cliHighlightPromise } /** * eg. "foo/bar.ts" → "TypeScript". Awaits the shared cli-highlight load, * then reads highlight.js's language registry. All callers are telemetry * (OTel counter attributes, permission-dialog unary events) — none block * on this, they fire-and-forget or the consumer already handles Promise<string>. */ export async function getLanguageName(file_path: string): Promise<string> { await getCliHighlightPromise() const ext = extname(file_path).slice(1) if (!ext) return 'unknown' return loadedGetLanguage?.(ext)?.name ?? 'unknown' }