mirror of
https://github.com/sinanyuntu/trade-message-center.git
synced 2026-09-17 13:22:11 +08:00
2.4 KiB
2.4 KiB
实施计划
1. 建立 DOM 适配目录
- 新建
src/onetalk/main-page/dom/,按设计中的五类 DOM 责任迁移实现。 - 在移动前,对每个被改动的导出符号执行 GitNexus upstream impact;风险为 HIGH 或 CRITICAL 时先报告并复核范围。
- 保持函数名与返回值稳定;只在
page-context.ts和image-send.ts保留领域编排,改为调用 DOM adapter。
2. 更新组合与测试导入
- 更新
page-script-entry.ts、page-bridge/main.ts、page-context.ts、image-send.ts的内部导入,确保没有残留的非 observer 直接document.querySelector*、元素创建/挂载或 document click 订阅。 - 更新
onetalk-action-status-tooltip、onetalk-conversation-id-copy、onetalk-page-context、onetalk-send-page、onetalk-page-bridge、onetalk-image-send和onetalk-file-send的必要导入与 fixture。 - 不修改
main-page/buyer-fact-observer/、main-page/contact-observer/或其测试。
3. 引入并使用 Testing Library
- 在
apps/chrome-extension/package.json的devDependencies添加@testing-library/dom、@testing-library/user-event和jsdom。 - 新增最小测试 helper,负责创建/销毁真实 document 和恢复全局状态;不替换所有现有 fixture。
- 让复制控件测试通过 Testing Library 按 role/name 定位按钮,并用
userEvent.click验证 Clipboard 调用与成功/失败反馈。
4. 验证与审查
- 运行受影响的 focused tests,单次 Node test 命令不超过 60 秒。
- 运行
pnpm --filter @trade-message-center/chrome-extension typecheck、扩展 build 和完整扩展 test。 - 搜索非 observer 的 MAIN-page source,确认 DOM API 只在
main-page/dom/和明确保留的 Popup 中出现。 - 执行 GitNexus
detect_changes(),确认只影响 DOM adapter、调用方、测试和依赖清单;审查没有改变 bridge、发送或观察语义。
Risk points
readSelectedConversationIds供 page bridge、买家事实和联系人资料路径调用;只抽取 DOM 读取,不得改其零/多选结果。- 复制控件自身使用 MutationObserver 来适配 SPA 重绘,但其文件不是被冻结的 observer 目录,仍随控件迁移。
- React file uploader 查找依赖宿主内部 fiber,迁移必须保持 null/多候选和发送失败语义。
- Node 内置 test runner 没有浏览器 DOM;新测试 runtime 必须局部化,不能污染其它测试的全局对象。