Uh oh!
There was an error while loading. Please reload this page.
docs(plugin-calendar): 对齐 README 的导入面与包的真实导出面 - #5046
Conversation
README 有三处导入漂移,照抄任一处都无法编译。核对方法:用 TypeScript compiler API 从 src/index.tsx 取本包真实导出名集合,再对 README 全部 import 语句(含多行 import 块)逐名核对。 1. 虚构,删。"Manual Registration" 一节教 calendarComponents 的 Object.entries(...).forEach(register)。该导出不存在,标识符在 src/ 零命中;照抄拿到 undefined,Object.entries(undefined) 抛 TypeError, 整节根本跑不起来。本包注册只是 import 入口的副作用,没有可遍历的 组件表,故删虚构节,改写为副作用 import 真正注册了什么(三个 schema type 及其命名空间键)与真实导出面;想要自定义注册键的宿主,改教注册 已导出的 ObjectCalendarRenderer。 2. 路径错,改路径。CalendarViewSchema 从本包导入。该类型是真的,但属于 @object-ui/types;本包只 import 不 re-export,故原导入是 "no exported member"。改指 @object-ui/types。 3. 同名撞车,改导入来源。仅改对第 2 处后示例仍不编译:同一个例子里的 CalendarEvent 是本包真导出,但那是 CalendarView 组件的运行时类型 (id: string | number、start: Date),不是 CalendarViewSchema.events 要的授权 JSON 类型(id: string、start: string | Date)——也不是 README 自己 "Calendar Event Structure" 一节记的形状。示例里的 ISO 字符串 因此不过类型检查。两个授权型统一从 @object-ui/types 取,并把两个同名 类型的区别并列写清。 未新增任何导出来把 README 变真(那是契约扩张,另立 #5044)。 Fixes#5010 Co-authored-by: Claude <noreply@anthropic.com>
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
yinlianghui
commented
Aug 17, 2026
验证回帖:本地实测输出 + CI 终态(jobs 端点交叉验证)1. 仓根 type-check(本 PR 的真实类型证据)命令: 2. 门禁脚本控制字节自扫(超出门禁扫描面):
3. CI 终态:19 个 check-run 全部 completed,零 failure按纪律用 jobs 端点(
4. 一处需要如实说明的事:CI 的绿不等于跑过测试jobs 端点比 check-runs 多给出的信息,值得单独点出来,免得后来的人误读这个绿:CI 的 也就是说:CI 那枚绿色的 唯一对本 PR 真正做了构建的是 Bundle Analysis(全量 build packages + console,全绿)。 Generated by Claude Code |
yinlianghui
commented
Aug 17, 2026
PM 验收:ACCEPT(session 实物核验(fetch 分支后按 验收要点:
派生物:#5043(README 自包导入无门禁,含检查器原型与两个已踩坑)、#5044( 转 ready 并挂 auto-merge(squash)。 Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#5010
packages/plugin-calendar/README.md的导入面与包的真实导出面对齐。卡面点了两处漂移,核对过程扫出第三处(同文件同性质,一并修,下面单列)。⛔ 没有为了让 README 变真而新增任何导出。前提验证(先行,含证伪反查)
calendarComponents在src零命中grep -rnw calendarComponents packages/plugin-calendar/src→ exit 1,无输出grep -rlnw ObjectCalendar packages/plugin-calendar/src→ 5 个文件(ObjectCalendar.tsx、CalendarView.tsx、index.tsx、两个 test)CalendarViewSchema真身在@object-ui/typespackages/types/src/complex.ts:174声明,packages/types/src/index.ts:268导出;本包src/calendar-view-renderer.tsx:10只 import,src/index.tsx无 re-export两处漂移都成立,
premise_still_valid: true。编译探针实测 README 在
origin/main上的原样(tsc 直读源码,非 dist):一处与卡面小有出入,如实记:
CalendarViewSchema报的是 TS2724(带拼写建议的「无此导出成员」)而非卡面写的 TS2305 —— 同族诊断,不影响判定与修法。后两条 TS2322 就是下面的第三处漂移。三处漂移:判定与修法(刻意区分,勿混)
:106-112"Manual Registration"calendarComponents不存在 → 照抄拿undefined,Object.entries(undefined)抛TypeError,整节跑不起来:242CalendarViewSchema类型是真的,但属于@object-ui/types,本包只 import 不 re-export:242-249(卡面未列)CalendarEvent是本包真导出,但是运行时类型;示例的 ISO 字符串与CalendarViewSchema.events要的授权类型对不上第三处漂移的来历(为什么只改路径不够)
把 #2 的路径改对之后,示例仍然不编译。探针 A(只改 #2 的路径、
CalendarEvent继续从本包导入)实测:根因是两个同名类型:
@object-ui/types(授权 JSON)@object-ui/plugin-calendar(组件运行时)idstringstring | numberstartstring | DateDateendstring | Date(必填)Date(可选)descriptionCalendarViewSchema.events要授权型,README 这个例子导的是运行时型。名集合核对看不见这一类(两个名字都是真导出),只有真编译看得见。修法定向不是猜的:README 自己的 "Calendar Event Structure" 一节记的就是授权型的形状(ISO 字符串 +
description),整篇 schema 示例也全用 ISO 字符串。所以两个授权型统一从@object-ui/types取,并加一段把两个同名类型并列写清,免得下一个读者(或 IDE 自动导入)再挑错。探针 B(本 PR 的写法)实测 0 error。同名本身没动 —— 那是契约变更,已另立 #5044 并给出三个方向与推荐。
名集合核对读数(全部自包导入,含多行块)
方法按 #5010 楼上立卡人的方法学备注:不做文本近似。用 TypeScript compiler API 从
src/index.tsx取checker.getExportsOfModule的导出符号集(解析 alias 后再判 value/type ——export { ObjectCalendar }是 Alias 符号、不带 Value flag,按 alias 判会把每个 re-export 误标成 type),再用跨行正则抓 README 全部 import 语句(单行 + 多行块),剥掉注释后逐名核对。真实导出面(7 个):
修复前:
calendarComponentsCalendarViewSchema@object-ui/typesCalendarEvent修复后(0 处缺陷):
ObjectCalendar/CalendarView/ObjectCalendarRendererObjectCalendarComponentProps/CalendarViewProps/CalendarEventObjectCalendarRendererCalendarViewSchema/CalendarEvent@object-ui/types跨包导入顺带核过:
ComponentRegistry→@object-ui/core(src/registry/Registry.ts)✅;createObjectStackAdapter→@object-ui/data-objectstack(src/index.ts)✅。删因(逐节一行)
### Manual Registration(原:103-113) —— 删因:所教的calendarComponents导出不存在且从未存在(src零命中),整节照抄即TypeError;本包注册纯粹是 import 入口的副作用,没有可遍历的组件表,所以这一节不是「写错了」而是「描述了一个不存在的机制」,无法就地改对,只能删。### What the side-effect import registers,列副作用 import 真正 claim 的三个 schema type 及其命名空间键(plugin-calendar:object-calendar、view:calendar、plugin-calendar:calendar-view,均取自ComponentRegistry.register(...)实际调用);新增### Public exports列真实导出面;想要自定义注册键的宿主,改教注册已导出的ObjectCalendarRenderer(ComponentRegistry是Registry实例,register(type, component, meta?)的 meta 可省,两参调用合法)。除此之外没有删任何一节。
反向验证(docs 形)
预判方向:往名集合核对里塞假名,应当被抓出;并且要专门验证立卡人指出的下限 —— 多行 import 块。
往两个多行块各塞一个假名(
calendarComponents、CalendarBogusSchema)后实测:两个都在多行块里、两个都被抓出 —— 正是单行 grep 看不到的那一类。截读数后已还原,临时改动未进 commit(
grep -n "PLANTED|CalendarBogusSchema|calendarComponents" README.md→ exit 1;还原后核对读数回到 0 缺陷)。顺带一记核对器自身的假阳性并已修:第一版没剥行尾
//注释,多行块里的注释被粘到前一个标识符上,把三个真名报成虚构。这条已写进 #5043。验证
pnpm exec turbo run type-check --concurrency=2—— Tasks: 81 successful, 81 total,exit 0(4m4s)。node scripts/check-control-bytes.mjs—— OK,扫 4504 个已跟踪文本文件(含本 PR 两个新增/改动文件)。grep -naP控制字节自扫改动文件 —— exit 1,无控制字节;file README.md报 UTF-8 text(未被当成 binary)。node scripts/check-doc-links.mjs—— Links are valid across 13 scan roots.node scripts/check-changeset-fixed.mjs+check-changeset-no-major.mjs—— 均 ✅(patch,未声明 major)。changeset
一文件:
.changeset/plugin-calendar-readme-export-surface-5010.md,@object-ui/plugin-calendar: patch。README 在本包package.json的files里,随 npm 发布,属用户可见。顺手记录的 finding(未在本 PR 修)
CalendarEvent同名并存(@object-ui/types授权型 vs@object-ui/plugin-calendar运行时型),已造成一处文档示例不可编译 #5044 —— 两个结构不兼容的CalendarEvent同名并存(本 PR 第三处漂移的根因);给了三个方向与推荐。events标成选填,且只列了 CalendarViewSchema 13 个键里的 6 个 #5045 —— 同文件 "Schema API" 块把必填的events标成选填,且只列了 13 个键里的 6 个(不同性质,故未夹带)。Generated by Claude Code