Uh oh!
There was an error while loading. Please reload this page.
docs(plugin-view): README 按真实导出面重写虚构的 viewComponents 手动注册,ObjectViewSchema 改从 @object-ui/types 导入 - #5078
Merged
Merged
Conversation
…chema 改从 @object-ui/types 导入 `### Manual Registration` 教的 `viewComponents` 在本包乃至全仓零命中(唯二命中就是 README 自己),照抄第一行即 `Object.entries(undefined)` 抛 TypeError。删掉该虚构节, 换成三节真话:七个 `ComponentRegistry.register` 调用认领的 schema 类型键表(含 `Registry.ts:195,240` 的命名空间键 + 裸 type 回落)、本包 39 个真实导出名、以及原片段 真正想做的事(把导出组件挂到自定义键)。 `ObjectViewSchema` 是真类型,但声明在 `@object-ui/types`(`objectql.ts`),本包只 import(`src/ObjectView.tsx:27`)不 re-export,按 README 原路径导入是 TS2305。修法是改 导入路径,⛔ 未新增任何导出或 re-export。改路径后示例的键面成为编译面上的断言,故随之 对齐真身:`objectName` 必填(`object` 不是声明成员)、`defaultViewType`、 `table.columns`。 其余未加类型标注的 schema 字面量键面(`object` / `viewMode` / `fields` / `mode` / `recordId` / `fieldConfig` / `nestedFields` / `tabs` …)渲染器一个都不读,性质不同、 需独立定级,另立卡不夹带。 Co-authored-by: Claude <noreply@anthropic.com>
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
yinlianghui
commented
Aug 17, 2026
CollaboratorAuthor
PM 验收:ACCEPT(session 实物核验:merge-base 验收要点:
派生物分诊(本评论即记录):#5077(其余 13 个无类型标注块的键面,42 声明成员清单 + 读点计数 + 两道门天生盲的机理)→ 转 ready 并挂 auto-merge(squash)。 Generated by Claude Code |
yinlianghui
marked this pull request as ready for review
August 17, 2026 22:38
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes#5014
基线
origin/main@e6cd3c26c9ee3c64d76b5e18ab8b41a4aaa09c97(worktree 显式建在该 sha 上)。方法学照抄同族已落地的四单:#5010 → PR #5046、#5016 → PR #5053、#5012 → PR #5059、#5015 → PR #5069。前提验证:卡面两条读数自己复测,都成立
卡面复核命令写的是裸 grep,按 #5012 的教训补词边界重测:
零命中用邻近词反查:同一套核对里
ObjectView命中导出面(src/index.tsx:18),所以viewComponents的零命中不是工具没跑起来。判定表
:41import { viewComponents }+:45Object.entries(viewComponents).forEach(…):337import type { ObjectViewSchema }from 本包packages/types/src/objectql.ts,从@object-ui/types导出;本包只 import(src/ObjectView.tsx:27)不 re-export:339-344该 typed 示例的键面(object/viewMode/fields)object不是声明成员(真名objectName,必填);viewMode/fields亦非声明成员⛔ 未新增任何导出、re-export 或类型来把 README 变真。
删掉的每一节,删因一行
### Manual Registration整节(改前:38-48) —— 它教的viewComponents不存在,读者复制的第一行就是Object.entries(undefined)抛 TypeError;而它想表达的「注册」根本不需要手动做,是 import 入口的副作用。替换为三节真话:七个register调用认领的 schema 类型键表、本包 39 个真实导出名、以及原片段真正想做的事(把导出组件挂到自定义键)。为什么 typed 示例的键面必须跟着一起改(而不是夹带)
改前那个示例被
ObjectViewSchema标注,但因为导入失败、标注是 error type,键面从不被判。把导入路径修对的同时,这三个键就第一次落到了编译面上:object不是声明成员且真名objectName必填 —— 不改示例就编译不过。这与 #5059 里GanttTask那一处同形。名集合核对读数
导出名集合取自构建产物
dist/index.d.ts,走 TS compiler API 的checker.getExportsOfModule;README 侧不用正则抓 import —— 先抽 fenced 块,每块ts.createSourceFile,再走ImportDeclaration的 AST,A as B判propertyName(导出名)而非本地别名。#5043 记的两个坑因此在结构上不可能发生。改后 43 个绑定逐个 OK,其中新增的两个多行 import 块覆盖本包全部 39 个导出名(24 值 + 15 类型),核对因此不再只是抽样。
编译探针读数
README 的 ts/tsx 块抄进 scratch,对同一批构建产物编译(
strict: true,没有为让块通过而放松任何选项);块按内容签名分类而非块序号,所以改前改后共用一套机器。跳过的四块(输出里列明,不静默丢):
:135/:153/:172/:193的 Schema API 形状速写 ——object: string/views: [...]这类类型语法落在值位置或裸字面量,故意不合法的 TS。剩下的 5 条 TS7006 不是本 PR 的漏修:是 CRUD 四段里
onCreate: async (data) => …写在无类型标注的const schema = { … }里,属那一族虚构 schema 键的一部分。改前改后逐条一一对应、坐标与文本完全相同(README 行号各 +79,即本 PR 的插入量):block08.ts(7,14)block09.ts(7,14):148→:227(Form View)block10.ts(8,20)block11.ts(8,20):179→:258(Create)block12.ts(9,20)block13.ts(9,20):209→:288(Update)block12.ts(9,24)block13.ts(9,24):209→:288(Update)block13.ts(8,20)block14.ts(8,20):225→:304(Delete)逐键 pin(改后示例的键面不靠外推)
散文与示例新增的断言单独钉在真类型上,一文件一键(多余属性会短路其余诊断 —— #5059 / #5069 都记过):
{ type: 'object-view', object: 'users' }TS2741: Property 'objectName' is missing … but required in type 'ObjectViewSchema'{ …, viewMode: 'grid' }{ …, fields: ['name'] }objectName/defaultViewType/table.columns)中间两行是本 PR 最该被读到的一条读数,如实记:
viewMode/fields这两个虚构键 tsc 不报。原因是结构性的 ——ObjectViewSchema extends BaseSchema,而BaseSchema带[key: string]: any(packages/types/src/base.ts:318),excess property 检查整体失效。也就是说编译探针在这个类型上唯一有牙的是「必填objectName缺失」;虚构键这一整类,这道门天生看不见。若不写下来,下一个读者会误以为「改后探针绿」等于「键面已被验证」。这条同时是下面 #5077 立卡的核心依据。反向验证(两条,预判先写)
(a) 名集合核对自证。 预判:
MISSING COUNT0 → 2;别名判导出名;行尾注释里的非导出词不得报。四条全符 ——viewComponents,viewComponents@:87ViewThings as ThingsViewThings而非别名ThingsViewThings@:112ViewSwitcher→ViewSwitcher as Switcher:73// viewComponents was never realViewTabBar仍 OK @:77MISSING COUNT: 2,还原读数0。变异全做在 README 的 scratch 副本上(检查器的--readme指向副本),git status --porcelain全程只有本卡那两个条目 —— 不存在「临时改动误入 commit」的窗口。(b) 改前 README 回填探针。 预判(先写):必须转红;新增诊断恰好两条、与所改两处一一对应;5 条既有 TS7006 原样携带;并且 —— 改前 typed 示例的坏键(
object/viewMode/fields)不会贡献诊断,因为导入失败会把标注变成 error type、把键面遮蔽掉。实测与预判完全一致(读数见上表)。第四条预判尤其要记:它意味着「改前红 / 改后绿」这条线只由两个 TS2305 承载;键面那一层从来没有被探针覆盖过,是改对导入路径之后才第一次可判 —— 这也是为什么键面对齐必须与路径修改同一 commit,以及为什么剩下 13 个无标注块的键面只能另立卡(#5077)。
方向即通常的「改前红 / 改后绿」,不适用
??链、计数门那类反转情形(这是导入名不存在,不是取值判决)。验证
pnpm exec turbo run type-check --concurrency=2→81 successful, 81 total(4m9s;重活经flock -w 3600 /tmp/os-heavy-verify.lock串行 +--max-old-space-size=4096)。node scripts/check-doc-links.mjs→Links are valid across 13 scan roots.node scripts/check-control-bytes.mjs→OK (scanned 4516 tracked text file(s); skipped 85 binary);改动两文件另做grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]'自扫,零命中。pnpm --workspace-concurrency=2 --filter '@object-ui/plugin-view...' build→ rc=0(探针与名集合核对所依赖的构建产物)。docs-only 的 CI 形状:
**/*.md与.changeset/**在paths-ignore里,Test / Type Check 各 job 的实质步骤会被 path-filter 短路成 skipped 而 job 报 success。按纪律计绿,但类型证据是上面的本地仓根读数,不是 CI 的(#5046 / #5053 / #5059 / #5069 先例)。顺手立的卡(未认领,不夹带进本 PR)
object(真名objectName)/viewMode/fields/mode/recordId/fieldConfig/nestedFields/tabs/pagination/searchable/sortable/enableDelete/onCreate/onUpdate/onDelete/onSubmit,以及写进 schema 的dataSource(真身是ObjectViewProps的必填 prop)。与本卡不同性质、不可切半,且两道门都看不见(无 import ⇒ 名集合核对不覆盖;有索引签名 ⇒ 编译探针不覆盖)。同族 plugin-gantt README 教的整片 schema 键面渲染器一个都不读 —— tasks / viewMode / object / startField 全零命中,照抄即空图 #5057 / plugin-dashboard 的dashboardComponents用组件类名作键(全仓唯一一个),README 教的手动注册循环因此注册 11 个没人写的 type、8 个真 type 一个没注册 #5064,元卡 A component type has THREE declared surfaces that disagree (TS schema type / registry meta inputs / renderer prop reads), and nothing reconciles or enforces them #4631。顺带记入本 PR(不另立卡,是 README 新增内容的一部分):本包的注册命名空间不统一 ——
object-view/view/view:simple用plugin-view,四个控件用view;view:simple因带命名空间实际落成plugin-view:view:simple。都已按实际读数写进新表,未做任何改动主张。changeset
.changeset/plugin-view-readme-truth-5014.md,@object-ui/plugin-view: patch,口径同 #5046 / #5053 / #5059 / #5069:无代码/类型/运行时改动,声明 patch 是因为README.md在包的files里,随下次发布到 npm。Generated by Claude Code