Skip to content

feat: migrate sequence chart and dot/link series to extension - #4704

Merged
xile611 merged 8 commits into
developfrom
codex/sequence-chart-extension
Oct 15, 2026
Merged

xile611 merged 8 commits into
developfrom
codex/sequence-chart-extension

Conversation

@skie1997

@skie1997 skie1997 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

将 type: 'sequence' 时序图及其 dot、link 系列迁移到 @visactor/vchart-extension。VChart 主包不再导出或自动注册这三者,原有 spec、布局和渲染行为保持不变。

  • 图表、transformer、系列实现、主题、数据转换及相关类型均由扩展包提供。registerSequenceChart({ VChart }) 和 registerSequenceAnalysis({ VChart }) 注册所需系列;common 图表单独使用时,从扩展包导入并调用 registerDotSeries()、registerLinkSeries()。
  • 清理主包的系列导出、全量注册和主题引用,共用工具继续复用主包标准实现。
  • 主包与扩展包视觉测试页均从固定的 /baseline.js、/current.js 中选择脚本地址,保留 phase 白名单校验,消除 URL 参数流入脚本地址的 CodeQL 告警来源。
  • 重新生成 vchart-types,移除本次迁移的 16 个旧声明和 197 个已无对应源码的历史声明,更新类型导出。build:types 先清理输出并禁用此次增量缓存,避免旧文件残留及连续构建漏生成;类型包 README 补充构建和迁移说明。
  • 更新 React、Taro、Openinula 封装及官网中英文示例、教程、按需加载和主题说明。
  • 保留原时序图的标准 BaseChart 生命周期及 link/dot spec 绑定。扩展系列单元测试、浏览器示例及 3 个时序视觉用例归扩展包维护;DataZoom 内部逻辑测试归主包,使用固定字段数据,不引用扩展实现。扩展包通过真实图表的公共 API 验证四种字段/方向组合下的缩放过滤及恢复,通过公开 Factory 注册/查询/创建方法验证按需注册,不再深层导入主包 util 或 factory-registry,删除对应测试路径映射。主包仅运行自身用例,不再引用、构建或加载扩展包。扩展包通过独立入口复用通用视觉框架,并从两侧对应源码构建扩展。

验证:

  • 标准 npm run build:types 连续执行两次通过,882 个输出逐字节一致;插入的旧声明被清理,手动删除的有效声明被恢复。生成声明无悬空相对导入,9 个迁移 API 均仅由扩展包导出。

  • 主包 DataZoom 与注册边界共 9 项、扩展包 32 项 Electron 单元测试通过,覆盖主包不自动注册、两个时序图入口、曲线连线、数据更新、dataZoom,以及迁入的 pictogram 回归。视觉框架 32 项测试通过;用例 ID 集合对照确认没有遗漏或重复。

  • 主包、扩展包和 React 源码类型检查通过;迁移代码 ESLint 无错误,提交钩子的 ESLint / Prettier / commitlint 均通过。

  • 检查主包 UMD:无 DotSeries、LinkSeries、registerDotSeries、registerLinkSeries 导出,dot/link 均未默认注册。

  • 默认全量视觉回归:主包 263 / 263、扩展包 3 / 3 通过,与官方 develop(c5ec72804c6b7205d69f1d93e65b299741404547)完整对照,无截图差异。扩展报告使用自身入口生成复现命令。

  • 固定脚本地址改动后重新运行视觉框架测试 32 / 32、两页面真实浏览器检查 12 / 12(合法 phase 加载对应固定脚本;非法 URL、路径、原型属性和空值均不加载脚本),全量视觉对照再次通过:主包 263 / 263、扩展包 3 / 3,无截图差异。首次运行因 Chromium 缓存缺失中止,恢复浏览器后完整重跑。

  • 磁盘不足曾中断验证,清理本次临时基线安装后复跑通过。扩展基线复用此前同一官方提交的产物:校验原报告哈希、主包部分与本次新构建逐字节一致、迁移前后扩展构建步骤逐字节一致。

  • Openinula 全包类型检查仍有 42 项既有错误(Inula React 类型、3D 类型导出等),与前次验证一致。

  • 已执行推送钩子的 rush test --only tag:package,因独立 worktree 的 Link flag invalid 在测试启动前中止;本次推送单次跳过该不可运行钩子,不将其计为全包测试通过。

Base automatically changed from feat/sequence-analysis to develop October 13, 2026 08:30
@skie1997
skie1997 marked this pull request as ready for review October 14, 2026 03:52

@visactor-review-bot visactor-review-bot Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

发现 1 个需要修复的按需加载问题,见行内评论。

@VisActor VisActor deleted a comment from visactor-review-bot Bot Oct 14, 2026
@skie1997 skie1997 changed the title feat: migrate sequence chart to vchart-extension feat: migrate sequence chart and dot/link series to extension Oct 14, 2026

@skie1997 skie1997 left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

最后复核了当前 HEAD 8057d4dc4c827513d2c38703c207720df70b951d,发现 1 处迁移清理遗漏:

[P2] 清理 vchart-types 中已迁移模块的旧声明,并避免构建重新发布残留文件

packages/vchart-types/types 仍保留 chart/sequence/(4 个)、series/dot/(5 个)、series/link/(4 个),以及 data/transforms/link-dot-info.d.ts、dot/link 主题声明,共 16 个文件。packages/vchart/package.json:25 的 build:types 直接向已有目录执行 tsc --emitDeclarationOnly,不会删除源文件迁走后遗留的声明。我复制现有类型目录到临时目录,使用当前源码和同样的声明生成参数运行后,16 个旧文件仍全部存在;新生成的根导出已正确移除 sequence/dot/link,但旧深路径声明仍会随类型包发布。建议删除这些旧声明,并让类型生成步骤清理或同步输出目录,确保源码删除也反映到发布产物。

其余核查结果:主包 sequence/dot/link 实现、主题、linkDotInfo 转换及注册/导出均已迁走;扩展包入口和两个时序图注册路径完整;React/Openinula/Taro 引用与教程已更新;主包 UMD 实测不导出或默认注册这些类/方法。schema 在正常 build:schema 中整文件重生成,不属于上述无法自动清理的残留。此次只复核,未修改代码。

@skie1997

Copy link
Copy Markdown
Contributor Author

已在 2d16d2d49cfa9a3a59f6ea9ce75f4b89f49c9897 修复上次最终复核发现的声明残留问题。

  • build:types 先清空输出目录,并关闭此次 composite / incremental 缓存,避免源码迁走后保留旧声明,也避免连续清理构建时跳过声明生成。
  • 从当前源码完整重生成 vchart-types,移除 sequence、dot/link 相关 16 个旧声明;同时清理 197 个已无对应源码的历史声明,更新根导出。README 已补充类型迁移和生成方式。
  • 标准构建连续两次通过:882 个声明逐字节一致;模拟的旧文件被删除,手动删除的有效文件被恢复。声明没有悬空相对导入,9 个迁移 API 的主包移除/扩展包导出检查通过。
  • 正常提交钩子的 ESLint / Prettier / commitlint 通过;全量视觉回归 266 / 266 通过,与官方 develop c5ec72804c6b7205d69f1d93e65b299741404547 无截图差异。

rush test --only tag:package 仍因独立 worktree 的 Link flag invalid 在启动测试前中止,未计为通过;本次推送单次跳过了该不可运行钩子。

@skie1997

Copy link
Copy Markdown
Contributor Author

已修复两处测试依赖边界问题,提交 1e4797e99、6f35ce2d8。

  1. 时序相关及此前残留的 pictogram 扩展单元测试迁至 packages/vchart-extension/__tests__,使用扩展包自己的 Jest 入口;对主包通过包名引用。主包只保留不导出、不自动注册 sequence / dot / link 的独立断言。两个浏览器示例及其数据也已迁入扩展包。
  2. 3 个时序视觉用例、扩展构建和加载逻辑迁到扩展包。主包视觉测试仅构建和加载 VChart;扩展包独立入口复用通用框架并注入自身构建与页面,依赖方向保持扩展包 → 主包。报告复现命令也指向对应入口。除历史 CHANGELOG 外,packages/vchart 中已无 vchart-extension / VChartExtension 引用。

验证:主包独立单测 1/1、扩展单测 36/36、视觉框架检查 32/32 通过;官方 develop 基线对比主包 263/263、扩展 3/3 通过,无截图差异。拆分前后的 266 个用例 ID 集合完全一致,迁入的 3 个视觉用例内容逐字节不变。正常提交钩子通过。

磁盘不足曾中断验证,清理本次临时基线安装后复跑通过。扩展基线复用了此前同一官方提交的已验证产物,原产物哈希、与新构建一致的主包字节以及未改变的扩展构建步骤均已校验。rush test --only tag:package 仍因独立 worktree 的 Link flag invalid 无法启动,未记为通过;本次推送单次跳过该不可运行钩子。

Comment thread packages/vchart-extension/__tests__/visual/page.html Fixed
@skie1997

Copy link
Copy Markdown
Contributor Author

循环依赖复核(HEAD 6f35ce2d87b123787d51f20e9bab89cd4a2549c8):未发现本次 PR 新增循环依赖,也未发现主包与扩展包之间的依赖闭环。

  • 扫描 workspace package.json 的 dependencies / devDependencies / peerDependencies / optionalDependencies,包依赖图没有循环。主包对扩展包无反向引用(历史 CHANGELOG 除外),源码、测试、配置及视觉加载链均保持扩展包 → 主包方向。
  • 对 VChart、扩展包、vutils-extension 及 React / Openinula / Taro 封装共 1332 个源码文件,使用 TypeScript 擦除类型引用后分析静态 import / export 和字面量动态导入。相对 PR merge-base b575ab82d7d5831ebaab5a95208c3ce03d05bc74,新增循环边为 0;sequence / sequenceAnalysis / dot / link 未进入循环。Taro 对生成产物 @visactor/vchart/build/es5 的引用未作为独立源码模块展开。

仍存在迁移前已有的主包内部循环:

core/index.ts → core/vchart.ts → compile/compiler.ts
              → constant/animate.ts → core/index.ts

同一循环组还涉及 plugin/other.ts、animation/config.ts,迁移前后循环边完全一致。根因在 packages/vchart/src/constant/animate.ts:1:只为获取 PREFIX 却从 ../core 总入口导入。后续可改为 import { PREFIX } from './base';,避免经过 core 入口。

构建日志中的另两条循环位于上游 @visactor/vrender-core@1.1.11 的 factory / stage / layer-service 链,在官方 develop 基线构建中也已存在。

本次仅检查并记录,没有修改源码,也没有重新运行与本次静态检查无关的全量视觉测试。

Comment thread packages/vchart-extension/__tests__/unit/series/sequence-analysis-review.test.ts Outdated
Comment thread packages/vchart-extension/__tests__/unit/series/sequence-extension.test.ts Outdated
@skie1997

Copy link
Copy Markdown
Contributor Author

已在 a0e012c 修复测试包边界:

  • DataZoom 内部逻辑测试放回主包,以固定字段数据验证主包行为,不引用扩展包。
  • 扩展包通过公开 Factory 注册/查询/创建 API 检查按需注册,去掉两处 factory-registry 深层导入。
  • 扩展 dataZoom 用真实图表和公共缩放 API 验证 from/source × X/Y 四种组合的过滤与恢复全选,去掉 util 深层导入。
  • 删除对应 Jest 和 TypeScript 深层路径映射。扩展单元测试的主包深层导入为 0,主包源码的扩展引用为 0。

验证:主包相关单元测试 9 / 9、扩展全部单元测试 32 / 32;与官方 develop 的全量视觉对照主包 263 / 263、扩展 3 / 3,无差异;提交钩子通过。标准 Rush 全包测试仍因 worktree 的 Link flag invalid 无法启动,未计作通过。

@xile611
xile611 merged commit 36c80d6 into develop Oct 15, 2026
11 of 14 checks passed
@xile611
xile611 deleted the codex/sequence-chart-extension branch October 15, 2026 01:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants