jamis
Version:
一种支持通过JSON配置方式生成页面的组件库
88 lines (87 loc) • 2.52 kB
TypeScript
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<ShikiPreProperties>;
/**
* 高亮代码 chunk,返回本次高亮的所有 ThemedToken 行
*
* 优先使用 Worker 处理,失败时回退到主线程处理。
* 调用者需要自行处理撤回。
* @param chunk 代码内容
* @param language 语言
* @param theme 主题
* @param callerId 调用者ID,用于标识不同的组件实例
* @returns ThemedToken 行
*/
highlightCodeChunk(chunk: string, language: string, theme: string, callerId: string): Promise<HighlightChunkResult>;
/**
* 使用主线程处理代码高亮
* @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 {};