mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-24 06:31:20 -08:00
refactor(danmuku): [PKG-DANMUKU-03] own input loading parsing and configuration
This commit is contained in:
1 parent
d3c91af92c
commit
0b2efb07f1
26 files changed
+9167
-503
No files matched your search
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,73 @@
|
||||
# PKG-DANMUKU-03 加载、解析和配置重构
|
||||
|
||||
弹幕生产源码已开始分层:`config.js`负责默认值、schema、变化比较与归一化;
|
||||
`input.js`负责输入形式、替换/追加归属及取消;`bilibili-parser.js`保持原XML转换;
|
||||
`bilibili.js`负责网络、解析Worker及资源收尾。原`danmuku.js`保留队列提交与事件出口,
|
||||
`index.js`保留同步门面。包内[维护地图](../../packages/artplayer-plugin-danmuku/ARCHITECTURE.md)
|
||||
和README说明这些边界。此步使用JS拆分,完整TS/Worker消息/公开声明归06,不能将本步
|
||||
描述成整个弹幕包已完成TS迁移。
|
||||
|
||||
## 保持的契约与明确修复
|
||||
|
||||
- `load/emit`仍返回Promise并解析为内部Danmuku,区别于同步门面;绑定方法、getter、
|
||||
属性顺序、`config/hide/show/reset`同步返回身份和`mount`的undefined结果保持。
|
||||
- 空数组初始化仍在注册返回前发出show/config/reset/loaded;非空数组在首次await前
|
||||
插入第一项,其后逐项await emit。过滤器接收当前option为this,加载函数无显式receiver。
|
||||
- 无参数load成功获取输入后替换;显式load追加且不修改配置。并发追加彼此独立,也可
|
||||
在替换后继续追加。逐项错误仍保留此前已接受项,并由load发一次原始error再拒绝。
|
||||
- 修复旧替换迟到覆盖新替换;新替换只使旧替换失效。销毁取消所有加载。取消的公共
|
||||
Promise成功解析为同一内部实例,不发迟到loaded/error、不写队列;外部Promise仍可
|
||||
运行,但其拒绝有局部观察。可用时abort fetch,不依赖AbortController才能正确取消。
|
||||
- 在reset、filter及异步返回后检查归属。只检查当前嵌套emit任务,允许旧filter里同步
|
||||
发起的新替换正常写入,再阻止旧调用续写;不是把旧任务的取消状态传给整个嵌套调用栈。
|
||||
- `time:0`保持0,负值钳位0,缺省为currentTime+0.5;原输入对象补mode/style/color后
|
||||
过滤及浅复制行为仍保留,未借修复时间顺便更改所有对象身份。
|
||||
- 单独更新函数配置现在生效,Promise按身份更新,普通结构相等项仍保持静默。先校验
|
||||
临时合并值再提交,非法配置不污染当前option。初始Promise输入与既有声明对齐。
|
||||
- fetch/text拒绝不再因async Promise executor悬挂;公开load保留拒绝,自动初始load
|
||||
在实例内观察拒绝并console.warn。空XML正常结束,解析Worker失败沿相同parser降级。
|
||||
成功/降级/协议错误/取消均清理Worker与Blob;其中一项清理抛错仍尝试另一项,原业务
|
||||
错误优先。原XML实体顺序、模式、未补齐颜色与数值转换保持,不引入HTTP状态硬拒绝。
|
||||
|
||||
## 初始化闭环与审查结果
|
||||
|
||||
为了捕获初始show/config/loaded中同步销毁,提前建立destroy订阅并在入口跳过后续
|
||||
Setting/heatmap创建。非法配置或初始轨道Worker构造失败回滚提前订阅并重抛原错。
|
||||
新增测试实际发现旧resize解绑身份错误;本步最小修正为解绑实际this.resize,避免
|
||||
初始化已销毁仍留监听。Setting既有DOM/计时器、RAF/轨道算法与heatmap没有在本步重写。
|
||||
|
||||
三代理分工为源码、输入测试、解析测试,父代理负责审查、真实浏览器、构建及整合。
|
||||
只读复审也独立指出Worker构造失败的提前订阅泄漏,修复后通过同一原错及零新增监听
|
||||
断言。没有修改冻结历史helper或把候选修复反写进旧版证据。
|
||||
|
||||
## 验证与失败证据
|
||||
|
||||
- 冻结旧契约44项及旧失败42项,共86项父代理复跑通过。
|
||||
- 候选20项输入/配置/初始化和26项解析/取消/错误测试,源码、正式main、正式legacy
|
||||
各46项联合通过,共138次;严格子进程确认自动加载已观察、公开load仍拒绝。
|
||||
- 原生浏览器:3种实现×2核心×4场景×3引擎,共72项通过,无跳过或未处理页面错误。
|
||||
核心为真实已发布5.4.0及候选5.4.1;Chromium、Firefox和Windows WebKit。
|
||||
成功路径断言收到实际Worker回复,不能让fallback掩盖压缩后函数脚本失效;故障场景
|
||||
单独替换原生解析Worker脚本为抛错脚本,确认局部错误处理、真实fallback与资源回收。
|
||||
- 使用仓库正常build生成main/legacy/esm及docs/compiled对应产物;ESM本步为构建通过,
|
||||
不把它计入三组运行用例。改动文件lint及全仓typecheck通过,后者检查366个已迁移
|
||||
生产TS文件与消费者矩阵,未迁移JS不算TS覆盖。
|
||||
|
||||
产物单测首轮main/legacy各41通过5失败:测试在工厂前注入parser Worker故障,产物
|
||||
inline Worker查全局Worker时误伤了初始轨道Worker;source夹具先捕获构造器而未显露
|
||||
此问题。将parser专用故障移到正常初始化和flush之后,原清理/原错断言全部保持;
|
||||
三组各26解析复验和最终各46联合复验均通过。原失败日志保留且机器报告引用哈希,
|
||||
不把这五项错误测试归为新增生产缺陷。初始化泄漏的红测则确有源码修复。
|
||||
|
||||
完整输入指纹、构建文件、日志、浏览器版本和原始附件见
|
||||
[机器证据](../baselines/danmuku-input-validation.json)。未新增依赖或改动Yarn锁文件,
|
||||
根`test:unit`与`test:danmuku`加入候选测试,浏览器沿用既有CI发现规则。
|
||||
|
||||
## 后续范围
|
||||
|
||||
INPUT-01与CONFIG-01在本步关闭;ASYNC-01只完成输入/解析子项,待04/05的可见性续体、
|
||||
轨道Worker及单RAF所有权。TYPE-01待06真实安装声明矩阵,CLEANUP-01只修resize部分。
|
||||
此前真实轨道重叠、heatmap零采样和Setting资源问题保持开放;72输入浏览器通过不代表
|
||||
它们被修复。04继续时钟/队列/轨道,05负责渲染/设置/热力图,06完整TS,07做稳定性验收。
|
||||
本地XML及故障夹具不是Bilibili实网、CSP矩阵、Safari设备或长时负载验收,也不是npm
|
||||
发布就绪证明。本任务独立commit,无推送、标签或发布。
|
||||
+4
-3
@@ -4,7 +4,7 @@
|
||||
|
||||
基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 228 项,范围 22 个包及工作区/示例。
|
||||
|
||||
状态:todo 72 / doing 15 / blocked 0 / done 141 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
状态:todo 71 / doing 15 / blocked 0 / done 142 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。
|
||||
|
||||
前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。
|
||||
|
||||
@@ -311,8 +311,8 @@
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| PKG-DANMUKU-01 | artplayer-plugin-danmuku<br>核对弹幕全部公开契约 | BASE-05 | emit/load/config/hide/show/reset/mount、option/isHide/isStop/icons 与事件清单 | 源码、声明、发布包、Bilibili 输入和设置入口对照 | H | done |
|
||||
| PKG-DANMUKU-02 | artplayer-plugin-danmuku<br>建立弹幕算法与浏览器基线 | PKG-DANMUKU-01, ENG-05, ENG-08 | 密集/稀疏弹幕、过滤/异步输入、seek/倍率/重载测试 | 轨道选择、发射顺序、事件、内存和可视结果可重跑 | H | done |
|
||||
| PKG-DANMUKU-03 | artplayer-plugin-danmuku<br>整理加载、解析与配置 | PKG-DANMUKU-02, CORE-08 | bilibili/input/parser/config 的分层与取消 | 旧格式、回调、过滤、追加/替换语义保持 | M | doing |
|
||||
| PKG-DANMUKU-04 | artplayer-plugin-danmuku<br>整理时钟、队列与轨道调度 | PKG-DANMUKU-03, CORE-10 | danmuku 调度器和确定性时钟测试 | seek/暂停/倍率/长时间运行无顺序和碰撞回归 | H | todo |
|
||||
| PKG-DANMUKU-03 | artplayer-plugin-danmuku<br>整理加载、解析与配置 | PKG-DANMUKU-02, CORE-08 | bilibili/input/parser/config 的分层与取消 | 旧格式、回调、过滤、追加/替换语义保持 | M | done |
|
||||
| PKG-DANMUKU-04 | artplayer-plugin-danmuku<br>整理时钟、队列与轨道调度 | PKG-DANMUKU-03, CORE-10 | danmuku 调度器和确定性时钟测试 | seek/暂停/倍率/长时间运行无顺序和碰撞回归 | H | doing |
|
||||
| PKG-DANMUKU-05 | artplayer-plugin-danmuku<br>整理 DOM 渲染、设置、热力图与 worker | PKG-DANMUKU-04, CORE-14, CORE-18 | renderer/setting/heatmap/worker 职责及资源归属 | mount/icons/设置和 worker 协议保持,销毁无后台工作 | H | todo |
|
||||
| PKG-DANMUKU-06 | artplayer-plugin-danmuku<br>迁移 TS 与公开声明 | PKG-DANMUKU-05, ENG-04, ENG-06 | 自有模块、worker 消息、option/item/result 类型 | 旧参数、扩展字段和事件消费通过,vendored 边界清楚 | H | todo |
|
||||
| PKG-DANMUKU-07 | artplayer-plugin-danmuku<br>弹幕能力稳定性验收 | PKG-DANMUKU-06 | 负载/渲染/资源对比及 mask 可依赖的稳定边界 | 在试点核心中旧插件 API 与关键帧路径通过 | H | todo |
|
||||
@@ -555,6 +555,7 @@
|
||||
- PKG-DPIP-05: [记录](changes/2026-09-12-PKG-DPIP-05-native-checkpoint.md) [记录](baselines/dpip-native-validation.json)
|
||||
- PKG-DANMUKU-01: [记录](baselines/danmuku-release.json) [记录](baselines/danmuku-contract.md) [记录](baselines/danmuku-contract-validation.json) [记录](changes/2026-09-13-PKG-DANMUKU-01-contracts.md)
|
||||
- PKG-DANMUKU-02: [记录](changes/2026-09-13-PKG-DANMUKU-02-controlled-failures.md) [记录](baselines/danmuku-failures-validation.json) [记录](changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md) [记录](baselines/danmuku-browser-validation.json)
|
||||
- PKG-DANMUKU-03: [记录](changes/2026-09-13-PKG-DANMUKU-03-input.md) [记录](baselines/danmuku-input-validation.json)
|
||||
- PKG-CANVAS-01: [记录](changes/2026-09-12-PKG-CANVAS-01-contract.md) [记录](baselines/canvas-contract.md) [记录](baselines/canvas-release.json) [记录](canvas-validation.md) [记录](baselines/canvas-contract-validation.json)
|
||||
- PKG-CANVAS-02: [记录](changes/2026-09-12-PKG-CANVAS-02-tests.md) [记录](baselines/canvas-behavior-validation.json) [记录](canvas-validation.md)
|
||||
- PKG-CANVAS-03: [记录](changes/2026-09-12-PKG-CANVAS-03-lifecycle.md) [记录](baselines/canvas-lifecycle-validation.json) [记录](canvas-validation.md)
|
||||
|
||||
@@ -1,5 +1,16 @@
|
||||
# 进度与证据
|
||||
|
||||
## PKG-DANMUKU-03 输入、解析和配置源码完成
|
||||
|
||||
拆分input/config/XML parser模块,修复过期替换、加载拒绝、资源清理、time0、函数配置
|
||||
及初始化销毁/失败;保留同步数组前缀、内部返回身份、追加及回调约定。候选三格式
|
||||
各46单测、三格式×两核心×三引擎共72真实浏览器项、旧基线86项通过;正式构建、
|
||||
lint和366生产TS/消费者检查通过。首轮产物parser故障夹具误伤已校正,原日志保留。
|
||||
见[变更](changes/2026-09-13-PKG-DANMUKU-03-input.md)及[机器证据](baselines/danmuku-input-validation.json)。
|
||||
228项:142 done、15 doing、71 todo。04进入时钟/轨道;
|
||||
本步仍是JS分层,完整TS归06,旧轨道重叠/Setting/heatmap风险继续。无推送或发布。
|
||||
|
||||
|
||||
## PKG-DANMUKU-02 历史错误和真实浏览器基线完成
|
||||
|
||||
42项受控旧缺陷、48项原生Worker/视频/布局/设置及6项300弹幕负载观察通过;所有
|
||||
|
||||
@@ -228,8 +228,8 @@
|
||||
| MASK-DOM-01 | open / 已复现 | Mask registration and frame processing assume Danmuku DOM, readable frames and a 2D context | PKG-MASK-02, PKG-MASK-03, PKG-MASK-05 |
|
||||
| MASK-NOTICE-01 | open / 源码/产物事实 | Published Mask bundles lack a separate third-party notice despite bundled SDK code | PKG-MASK-06 |
|
||||
| DANMUKU-TYPE-01 | open / 已复现 | Danmuku historical declared results, optional mount and initial Promise input disagree with runtime | PKG-DANMUKU-03, PKG-DANMUKU-06 |
|
||||
| DANMUKU-INPUT-01 | open / 已复现 | Danmuku replaces time zero with current time plus 0.5 and mutates supplied input objects | PKG-DANMUKU-02, PKG-DANMUKU-03 |
|
||||
| DANMUKU-CONFIG-01 | open / 已复现 | Danmuku JSON configuration comparison ignores a replacement filter function | PKG-DANMUKU-02, PKG-DANMUKU-03 |
|
||||
| DANMUKU-INPUT-01 | resolved / 已复现 | Danmuku replaces time zero with current time plus 0.5 and mutates supplied input objects | PKG-DANMUKU-02, PKG-DANMUKU-03 |
|
||||
| DANMUKU-CONFIG-01 | resolved / 已复现 | Danmuku JSON configuration comparison ignores a replacement filter function | PKG-DANMUKU-02, PKG-DANMUKU-03 |
|
||||
| DANMUKU-CLEANUP-01 | open / 已复现 | Danmuku removes a different resize callback and retains the settings lock timer on destroy | PKG-DANMUKU-02, PKG-DANMUKU-05 |
|
||||
| DANMUKU-TYPE-02 | open / 源码/产物事实 | Danmuku id, icons, Slider steps, heatmap points and partial configuration drift from declarations | PKG-DANMUKU-05, PKG-DANMUKU-06 |
|
||||
| DANMUKU-ASYNC-01 | open / 已复现 | Danmuku asynchronous input, worker replies and pending visibility have unverified failure and cancellation paths | PKG-DANMUKU-02, PKG-DANMUKU-03, PKG-DANMUKU-04, PKG-DANMUKU-05 |
|
||||
|
||||
+33
-9
@@ -5031,7 +5031,9 @@
|
||||
"evidence": [
|
||||
"refactor/baselines/danmuku-contract.md",
|
||||
"refactor/baselines/danmuku-contract-validation.json",
|
||||
"refactor/baselines/danmuku-release.json"
|
||||
"refactor/baselines/danmuku-release.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Preserve latest published complete root type contracts and actual legal JS return identities; expose accurate types separately.",
|
||||
"closureCriteria": "Installed consumers verify latest root assignments and precise async/getter/mount contracts; initial Promise mismatch has an explicit tested resolution."
|
||||
@@ -5040,7 +5042,7 @@
|
||||
"id": "DANMUKU-INPUT-01",
|
||||
"title": "Danmuku replaces time zero with current time plus 0.5 and mutates supplied input objects",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-DANMUKU-02",
|
||||
"PKG-DANMUKU-03"
|
||||
@@ -5048,16 +5050,25 @@
|
||||
"evidence": [
|
||||
"refactor/baselines/danmuku-contract.md",
|
||||
"refactor/baselines/danmuku-contract-validation.json",
|
||||
"refactor/baselines/danmuku-release.json"
|
||||
"refactor/baselines/danmuku-release.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Separate the time-zero defect from observable input object identity/mutation before changing parsing or queue ownership.",
|
||||
"closureCriteria": "Zero, absent, negative and explicit times plus object identity are covered with candidate expectations and compatibility decisions."
|
||||
"closureCriteria": "Zero, absent, negative and explicit times plus object identity are covered with candidate expectations and compatibility decisions.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json",
|
||||
"test/danmuku-input.test.js",
|
||||
"test/browser/danmuku-input.spec.js"
|
||||
],
|
||||
"resolutionRationale": "Candidate source/main/legacy preserve input mutation and internal returns while explicitly preserving zero and clamping negative time; native browsers confirm zero."
|
||||
},
|
||||
{
|
||||
"id": "DANMUKU-CONFIG-01",
|
||||
"title": "Danmuku JSON configuration comparison ignores a replacement filter function",
|
||||
"confirmation": "reproduced",
|
||||
"status": "open",
|
||||
"status": "resolved",
|
||||
"owners": [
|
||||
"PKG-DANMUKU-02",
|
||||
"PKG-DANMUKU-03"
|
||||
@@ -5065,10 +5076,19 @@
|
||||
"evidence": [
|
||||
"refactor/baselines/danmuku-contract.md",
|
||||
"refactor/baselines/danmuku-contract-validation.json",
|
||||
"refactor/baselines/danmuku-release.json"
|
||||
"refactor/baselines/danmuku-release.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Compare relevant configuration values without dropping callable properties; retain callback receivers and config event ordering.",
|
||||
"closureCriteria": "Function-only changes take effect, unchanged options remain stable and partial configuration/callback reentry has regression evidence."
|
||||
"closureCriteria": "Function-only changes take effect, unchanged options remain stable and partial configuration/callback reentry has regression evidence.",
|
||||
"resolutionEvidence": [
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json",
|
||||
"test/danmuku-input.test.js",
|
||||
"test/browser/danmuku-input.spec.js"
|
||||
],
|
||||
"resolutionRationale": "Candidate source/main/legacy apply function-only updates, preserve equal plain values and callback receivers, reject invalid updates transactionally, and withstand synchronous reentry; native browsers confirm."
|
||||
},
|
||||
{
|
||||
"id": "DANMUKU-CLEANUP-01",
|
||||
@@ -5084,7 +5104,9 @@
|
||||
"refactor/baselines/danmuku-contract-validation.json",
|
||||
"refactor/baselines/danmuku-release.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||||
"refactor/baselines/danmuku-browser-validation.json"
|
||||
"refactor/baselines/danmuku-browser-validation.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Track and release exact subscription and timer ownership across settings, renderer and instances.",
|
||||
"closureCriteria": "Repeated lifecycle and pending settings actions leave no owned subscriptions, timers or late DOM writes."
|
||||
@@ -5124,7 +5146,9 @@
|
||||
"refactor/baselines/danmuku-failures-validation.json",
|
||||
"test/danmuku-failures.test.js",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-02-browser-baseline.md",
|
||||
"refactor/baselines/danmuku-browser-validation.json"
|
||||
"refactor/baselines/danmuku-browser-validation.json",
|
||||
"refactor/changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"refactor/baselines/danmuku-input-validation.json"
|
||||
],
|
||||
"compatibleResolution": "Reproduce load ordering, Bilibili rejection and late worker/visibility paths before defining operation ownership.",
|
||||
"closureCriteria": "Failures settle, obsolete results cannot alter new queues or destroyed instances, and worker resources are released with browser evidence."
|
||||
|
||||
+6
-3
@@ -3300,11 +3300,14 @@
|
||||
"PKG-DANMUKU-02",
|
||||
"CORE-08"
|
||||
],
|
||||
"status": "doing",
|
||||
"status": "done",
|
||||
"risk": "M",
|
||||
"deliverable": "bilibili/input/parser/config 的分层与取消",
|
||||
"acceptance": "旧格式、回调、过滤、追加/替换语义保持",
|
||||
"evidence": []
|
||||
"evidence": [
|
||||
"changes/2026-09-13-PKG-DANMUKU-03-input.md",
|
||||
"baselines/danmuku-input-validation.json"
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "PKG-DANMUKU-04",
|
||||
@@ -3317,7 +3320,7 @@
|
||||
"PKG-DANMUKU-03",
|
||||
"CORE-10"
|
||||
],
|
||||
"status": "todo",
|
||||
"status": "doing",
|
||||
"risk": "H",
|
||||
"deliverable": "danmuku 调度器和确定性时钟测试",
|
||||
"acceptance": "seek/暂停/倍率/长时间运行无顺序和碰撞回归",
|
||||
|
||||
Reference in new issue
Block a user