-
CHM 文件解析器
- 读取 ITSF (Info-Tech Storage Format) 头部信息
- 解析 ITSP (Info-Tech Storage Path) 头部信息
- 处理 LZXC (LZX Compression) 控制信息
- 解析目录块并构建路径索引树
- 提供每个文件的偏移与压缩状态元数据
-
LZX 解码器
- 实现 Sliding Window 解码机制
- 支持 Reset Table / Block Index 跳转解码
- 解码 Literal/Match 序列,复原原始文件内容
- 处理不同窗口大小的 LZX 数据
-
文件重组器
- 支持按需读取指定文件 offset 所在数据块
- 解码并拼接数据,重建完整文件 Buffer
- 输出为 HTML、图片、纯文本等格式
-
CHM 编码器
- 写入标准 CHM 结构(ITSF、ITSP、LZXC Headers)
- 写入压缩数据块、目录信息、控制块
- 支持自定义窗口大小和压缩级别
-
TOC 构建器
- 自动生成
.hhc(目录)与.hhk(索引)文件内容 - 支持基于文件结构或用户指定 TOC 构造树状结构
- 自动识别 HTML 标题层级
- 自动生成
-
LZX 压缩器
- 使用 Sliding Window 和 Huffman 编码将文件压缩成 LZX 格式
- 控制压缩块大小(一般为 0x8000)
- 优化压缩率和速度
-
CHMKit 类完善
- 基础操作方法
- 实现
parse()方法:完整解析 CHM 文件 - 实现
extract()方法:提取指定文件或全部内容 - 实现
pack()方法:打包目录为 CHM 文件 - 实现
getInfo()方法:获取 CHM 文件详细信息
- 实现
- 便捷读取方法(基于 CHMReader)
-
CHMKit.readFile(chmPath: string, filePath: string): Promise<Buffer>:读取单个文件 -
CHMKit.readText(chmPath: string, filePath: string): Promise<string>:读取文本内容 -
CHMKit.readHTML(chmPath: string, filePath: string): Promise<string>:读取 HTML 页面 -
CHMKit.listFiles(chmPath: string): Promise<string[]>:列出所有文件 -
CHMKit.searchContent(chmPath: string, keyword: string): Promise<SearchResult[]>:搜索内容 -
CHMKit.getTOC(chmPath: string): Promise<TOCEntry[]>:获取目录结构 -
CHMKit.exists(chmPath: string, filePath: string): Promise<boolean>:检查文件存在
-
- 批量操作方法
-
CHMKit.readMultiple(chmPath: string, filePaths: string[]): Promise<Map<string, Buffer>>:批量读取 -
CHMKit.exportFiles(chmPath: string, filePaths: string[], outputDir: string): Promise<void>:批量导出
-
- 基础操作方法
-
类型定义和接口
-
CHMFileInfo接口:文件信息结构 -
TOCEntry接口:目录条目结构 -
IndexEntry接口:索引条目结构 -
SearchResult接口:搜索结果结构 -
SearchOptions接口:搜索选项配置 -
FileTreeNode接口:文件树节点结构 -
CacheStrategy枚举:缓存策略类型 -
FileWithMetadata接口:带元数据的文件 -
NavLink接口:导航链接结构
-
-
平台集成 API
- Electron 主进程集成
-
CHMKit.createElectronHandler(): ElectronHandler:创建 IPC 处理器 - 支持主进程中安全的文件读取
- 预定义的 IPC 通道和事件
-
- Electron 渲染进程集成
-
CHMKit.createRenderer(preloadAPI): CHMRenderer:创建渲染器代理 - 支持渲染进程中的异步调用
- 内置错误处理和重试机制
-
- Web Worker 支持
-
CHMKit.createWorker(): Worker:创建专用 Worker - 支持后台解析和缓存
- 非阻塞的文件操作
-
- Electron 主进程集成
-
便捷方法(向后兼容)
-
list():列出所有文件路径 -
get(path):获取指定文件 Buffer -
extractAll():批量导出全部资源 -
search(keyword):搜索文件内容
-
-
虚拟文件系统 (Virtual File System)
- 实现内存中的文件树结构
- 支持文件路径映射和查找
- 缓存文件元数据(大小、偏移、压缩状态)
- 支持目录遍历和文件枚举
-
按需解码引擎
- 智能文件大小判断机制
- 小文件(< 64KB)直接全量解码缓存
- 大文件按块解码,支持范围请求
- LRU 缓存策略,优化内存使用
- 后台预加载常用文件
-
流式数据 API
-
readFile(path): Promise<string | Buffer>:读取完整文件 -
readFileStream(path, start?, end?): Promise<Buffer>:范围读取 -
getFileInfo(path): FileInfo:获取文件元信息 -
createReadStream(path): ReadableStream:创建可读流 - 支持文本编码自动检测
-
-
CHM 阅读器核心类 (CHMReader)
- 文件操作 API
-
CHMReader.open(filePath): Promise<CHMReader>:打开 CHM 文件 -
reader.close(): Promise<void>:关闭阅读器释放资源 -
reader.isOpen(): boolean:检查阅读器状态 -
reader.getFilePath(): string:获取当前打开的文件路径
-
- 文件系统导航 API
-
reader.listFiles(pattern?: string): Promise<string[]>:列出所有文件路径 -
reader.listDirectories(): Promise<string[]>:列出所有目录 -
reader.exists(path: string): Promise<boolean>:检查文件是否存在 -
reader.getFileTree(): Promise<FileTreeNode>:获取完整文件树结构 -
reader.glob(pattern: string): Promise<string[]>:通配符匹配文件
-
- 文件读取 API
-
reader.readFile(path: string): Promise<Buffer>:读取文件原始数据 -
reader.readText(path: string, encoding?: string): Promise<string>:读取文本文件 -
reader.readHTML(path: string): Promise<string>:读取 HTML 内容 -
reader.readJSON(path: string): Promise<any>:读取 JSON 文件 -
reader.readImage(path: string): Promise<Buffer>:读取图片文件 -
reader.readCSS(path: string): Promise<string>:读取样式文件 -
reader.readJS(path: string): Promise<string>:读取 JavaScript 文件
-
- 高级读取 API
-
reader.readRange(path: string, start: number, end: number): Promise<Buffer>:范围读取 -
reader.createReadStream(path: string): Promise<ReadableStream>:创建读取流 -
reader.readWithMetadata(path: string): Promise<FileWithMetadata>:读取文件+元数据 -
reader.readMultiple(paths: string[]): Promise<Map<string, Buffer>>:批量读取
-
- 文件信息 API
-
reader.getFileInfo(path: string): Promise<CHMFileInfo>:获取文件详细信息 -
reader.getFileSize(path: string): Promise<number>:获取文件大小 -
reader.getCompressedSize(path: string): Promise<number>:获取压缩后大小 -
reader.getCompressionRatio(path: string): Promise<number>:获取压缩比 -
reader.getMimeType(path: string): Promise<string>:获取 MIME 类型
-
- 导航和目录 API
-
reader.getTOC(): Promise<TOCEntry[]>:获取目录结构 -
reader.getIndex(): Promise<IndexEntry[]>:获取索引 -
reader.getDefaultPage(): Promise<string>:获取默认首页 -
reader.getHomePage(): Promise<string>:获取主页路径 -
reader.getNavigationLinks(path: string): Promise<NavLink[]>:获取导航链接
-
- 搜索功能 API
-
reader.search(keyword: string, options?: SearchOptions): Promise<SearchResult[]>:全文搜索 -
reader.searchInFile(path: string, keyword: string): Promise<SearchMatch[]>:文件内搜索 -
reader.findFiles(pattern: string): Promise<string[]>:按名称查找文件 -
reader.fuzzySearch(query: string): Promise<SearchResult[]>:模糊搜索
-
- 缓存和性能 API
-
reader.preload(paths: string[]): Promise<void>:预加载文件 -
reader.clearCache(): Promise<void>:清空缓存 -
reader.getCacheStats(): Promise<CacheStats>:获取缓存统计 -
reader.setCacheStrategy(strategy: CacheStrategy): void:设置缓存策略
-
- 文件操作 API
-
性能优化特性
- 延迟加载:仅在需要时解码文件
- 智能预测:基于访问模式预加载相关文件
- 内存池管理:复用 Buffer 对象减少 GC
- 压缩感知:根据压缩比调整缓存策略
-
单元测试
- 选择测试框架(Vitest/Bun Test 等)
- CHM 解析器测试
- LZX 解码器测试
- 文件重组器测试
- CHM 编码器测试
- CHM 阅读器测试
- 虚拟文件系统测试
- 按需解码引擎测试
- BitReader 工具类测试
- Huffman 工具类测试
-
集成测试
- 完整的 CHM 文件解析测试
- 解析后重新打包测试
- CHM 阅读器端到端测试
- 按需解码性能测试
- 不同 CHM 版本兼容性测试
- 大文件处理性能测试
- 并发访问压力测试
-
示例文件
- 收集各种 CHM 文件样本
- 创建测试用的 CHM 文件
- 验证与其他 CHM 工具的兼容性
-
extract 命令增强
- 支持正则表达式过滤
- 支持并行提取以提高性能
- 添加进度条显示
- 支持提取到不同格式(如 ZIP)
-
pack 命令增强
- 自动检测和生成 TOC
- 支持模板系统
- 支持增量更新
- 添加压缩选项控制
-
info 命令增强
- 显示详细的文件统计信息
- 支持验证 CHM 文件完整性
- 显示压缩率等性能指标
-
read 命令(新增)
- 基础读取功能
-
chmkit read <input.chm> [file-path]:读取指定文件 -
chmkit read <input.chm> --list:列出所有文件 -
chmkit read <input.chm> --toc:显示目录结构 -
chmkit read <input.chm> --index:显示索引
-
- 输出控制选项
-
--output <file>:输出到指定文件 -
--stdout:输出到标准输出(默认) -
--format <text|json|raw>:指定输出格式 -
--encoding <encoding>:指定文本编码
-
- 文件过滤和搜索
-
--pattern <glob>:通配符匹配文件 -
--search <keyword>:搜索包含关键词的文件 -
--type <html|image|css|js|text>:按文件类型过滤 -
--size <min-max>:按文件大小过滤
-
- 交互式功能
-
--interactive:启动交互式文件浏览器 -
--tree:以树状结构显示文件 -
--preview:预览文件内容摘要
-
- 高级读取选项
-
--range <start:end>:范围读取(字节偏移) -
--stream:流式输出大文件 -
--metadata:同时输出文件元数据 -
--batch <file-list>:批量读取多个文件
-
- 性能和缓存
-
--no-cache:禁用缓存 -
--preload:预加载相关文件 -
--parallel <num>:并行处理数量
-
- 基础读取功能
-
API 文档
- 完整的 TypeScript 类型文档
- CHM 阅读器 API 文档
- 虚拟文件系统接口文档
- JSDoc 注释补充
- 在线 API 文档生成
-
使用示例
-
基础用法示例
- 简单的文件读取示例
- CHM 文件信息获取示例
- 目录结构遍历示例
-
CHM 阅读器使用示例
- 完整的 CHM 阅读器应用示例
- 流式数据处理示例
- 缓存策略配置示例
- 搜索功能集成示例
-
平台集成示例
- Electron 应用集成
- 主进程中打开和读取 CHM 文件
- 渲染进程中显示 CHM 内容
- IPC 通信处理 CHM 操作
- 本地 CHM 文件浏览器应用
- Node.js 服务器示例
- Express 服务器提供 CHM 内容
- RESTful API 接口设计
- WebSocket 实时搜索
- Web Worker 示例
- 后台解析大型 CHM 文件
- 非阻塞的文件索引构建
- Electron 应用集成
-
高级用法示例
- 批量处理多个 CHM 文件
- CHM 内容转换和迁移
- 自定义缓存策略实现
- 性能监控和优化
-
错误处理示例
- 文件不存在处理
- 损坏文件恢复
- 网络错误重试机制
- 内存不足优雅降级
-
-
教程
- CHM 文件格式说明
- LZX 压缩算法介绍
- 最佳实践指南
-
内存优化
- 流式处理大文件
- 内存使用监控
- 缓存策略优化
-
性能基准测试
- 与其他 CHM 工具的性能对比
- 不同文件大小的处理时间测试
- 内存使用效率测试
-
npm 包发布
- 配置 npm 发布流程
- 设置 CI/CD 自动发布
- 版本管理策略
-
跨平台支持
- Windows 平台测试
- macOS 平台测试
- Linux 平台测试
- 二进制依赖处理
- 项目结构创建
- TypeScript 配置
- 代码质量工具配置(ESLint, Prettier, Husky)
- 基础类型定义
- CLI 框架搭建
- BitReader 工具类实现
- Huffman 工具类实现
- 项目文档结构
- 构建和发布配置
高优先级 (High Priority)
- CHM 文件解析器实现
- LZX 解码器实现
- 基础的 extract 功能
- CHM 阅读器核心功能(虚拟文件系统 + 按需解码)
中优先级 (Medium Priority)
- CHM 阅读器高级特性(缓存策略、预加载、搜索)
- CHM 编码器实现
- pack 功能完善
- 完整的测试覆盖
低优先级 (Low Priority)
- 性能优化
- 高级 CLI 功能
- 详细文档