import type { ThemedToken } from 'shiki'; export type ShikiPreProperties = { class: string; style: string; tabindex: number; }; /** * 代码 chunk 高亮结果 * * @param lines 所有高亮行(包括稳定和不稳定) * @param recall 需要撤回的行数 */ export interface HighlightChunkResult { lines: ThemedToken[][]; recall: number; } /** * Shiki 代码高亮服务 * * - 支持流式代码高亮。 * - 优先使用 Worker 处理高亮请求。 */ declare class ShikiStreamService { private highlighter; private tokenizerCache; constructor(); /** * 判断是否正在使用主线程高亮。外部不要依赖这个方法来判断。 */ hasMainHighlighter(): boolean; /** * 确保 highlighter 已配置 * @param language 语言 * @param theme 主题 */ private ensureHighlighterConfigured; /** * 获取 Shiki 的 pre 标签属性 * * 跑一个简单的 hast 结果,从中提取 properties 属性。 * 如果有更加稳定的方法可以替换。 * @param language 语言 * @param theme 主题 * @returns pre 标签属性 */ getShikiPreProperties(language: string, theme: string): Promise; /** * 高亮代码 chunk,返回本次高亮的所有 ThemedToken 行 * * 优先使用 Worker 处理,失败时回退到主线程处理。 * 调用者需要自行处理撤回。 * @param chunk 代码内容 * @param language 语言 * @param theme 主题 * @param callerId 调用者ID,用于标识不同的组件实例 * @returns ThemedToken 行 */ highlightCodeChunk(chunk: string, language: string, theme: string, callerId: string): Promise; /** * 使用主线程处理代码高亮 * @param chunk 代码内容 * @param language 语言 * @param theme 主题 * @param callerId 调用者ID * @returns 高亮结果 */ private highlightWithMainThread; /** * 获取或创建 tokenizer * @param callerId 调用者ID * @param language 语言 * @param theme 主题 * @returns tokenizer 实例 */ private getStreamTokenizer; /** * 清理特定调用者的 tokenizers * @param callerId 调用者ID */ cleanupTokenizers(callerId: string): void; /** * 销毁所有资源 */ dispose(): void; } export declare const shikiStreamService: ShikiStreamService; export {};