refactor(vtt-thumbnail): [PKG-VTT-THUMB-03] validate cues and separate pure lookup

This commit is contained in:
Harvey Zhao committed 2026-09-13 08:50:33 +08:00
1 parent 524ddf784f
commit 80588a3046
19 files changed
+3049 -169

No files matched your search

@@ -0,0 +1,38 @@
# PKG-VTT-THUMB-03 解析与模块整理完成
在 524ddf78 的请求/资源检查点基础上,完成纯解析与区间查找边界。
parseVtt 导出纯 findThumbnail,preview 只负责消费 cue、定位和计时器。
注册、请求、生命周期、解析、视图及旧源码 helper 的职责详见包内 ARCHITECTURE.md。
## 格式支持和修复
新解析器识别 BOM/CRLF、header 注释、cue ID、NOTE 注释、STYLE/REGION 块与 timing settings。
这些块不用于修改播放器样式。三位及更长小时数不再被截断。无效头、时间戳、逆向区间、
缺失图片、重复/未知 xywh 键、非有限/负数坐标、零尺寸等给出带原始行号的 TypeError,
在安装 UI 之前整体拒绝。坐标前后空白现在规范为可用 CSS 数字。
格式结构参考 [W3C WebVTT](https://www.w3.org/TR/webvtt1/)(2026-09-13 核对),
采用自有实现,没有引入第三方解析器或复制其实现。这里仅解析 thumbnail metadata,
不是完整字幕解析/渲染器;不处理多行字幕 payload、timestamp-map 偏移或全部字幕设置。
## 兼容边界
保留 floor 时间边界、首个包含端点的命中、原始输入顺序、重叠/未排序 cue、正常小数矩形、
四键排列与字面 URL 拼接。还保留历史紧凑箭头、纯秒时间、分钟/秒字段的进位算术、
零时长 cue、紧密 cue 对及 time/payload 间空行;不因标准校验重新收紧已可用的旧输入。
空文件/仅头/仅注释均为空预览。真实 demo 120 个 cue 与旧 parser 深度比较完全相同。
坏格式曾生成错误 CSS 或无法定位的异常,不视为要求继续保持的有效 API。
## 验证
26 项解析测试在固定旧 parser/运行产物上 5 通过、21 失败;新源码通过。
坏输入还通过候选工厂验证 Promise 拒绝及监听器/控件清理;扩展 cue 验证重叠首个命中。
浏览器用真实 HTTP 文本、sprite、旧/新核心验证扩展 VTT 悬停与坏格式拒绝后的重试恢复,
继续运行原生请求取消和 destroy(false) 清理。各入口和最终 CI 以
[验证记录](../baselines/vtt-thumbnail-parser.json)为准,不把纯 parser 测试称为安装包证据。
本任务完成的是 03 的内部结构和已复现输入/生命周期修复。04 继续严格 TS、公开类型和
旧消费形式;05/06 继续旧核心范围、移动/全屏/chapter 组合、安装/demo/编辑器。
类型/导出/完整生命周期风险继续由后续任务承接,不能据此声称包已可发布。
无新依赖或版本变化;正常构建生成 main/legacy/ESM 及 docs 副本。本任务独立提交,
回退只恢复解析检查点,前次资源修复仍可保留;不推送或发布。