Uh oh!
There was an error while loading. Please reload this page.
docs(plugins): 三个插件文档页按真实 register 键表重写虚构的 *Components 手动注册 - #5085
Conversation
`content/docs/plugins/plugin-{form,grid,view}.mdx` 的 `### Manual Registration`
教读者 `Object.entries(xxxComponents).forEach(register)`。三个名字在各自包的
`src` 与全仓源码里都零命中,照抄第一行拿到 `undefined`,`Object.entries(undefined)`
当场抛 TypeError;编译面同样是 TS2305。这是 #5002 家族在文档站的镜像 —— 包内
README 侧已由 #5011 / #5013 / #5014 修完,七个 PR 都只动 README,没碰到这份复制品。
三处一律换成三节真话,键从 `ComponentRegistry.register(...)` 调用现场抄,不从
文档反推:
- 注册是 import 的副作用,没有可迭代的组件表;
- 各包真实的 register 键表(namespaced 键 + bare 兜底,含 `skipFallback` 语义,
依据 `packages/core/src/registry/Registry.ts:194`,兜底分支在 `:226`);
- 「把导出组件挂到自己的键上」才是这里的手动注册,示例用真实导出名。
导出名逐一对各包已构建的 `dist/index.d.ts` 核过(TS 编译器 API
`checker.getExportsOfModule`),三段新示例块在 `strict` 下对同一批声明编译通过。
未新增任何导出或 re-export。
仅文档:无代码/类型/运行时改动。`.mdx` 不随 npm 发布,
`scripts/check-changeset-presence.mjs` 实测判定 "no changeset is owed"。
Co-authored-by: Claude <noreply@anthropic.com>yinlianghui
commented
Aug 17, 2026
PM 验收:ACCEPT(session 实物核验:merge-base 验收要点:
派生物分诊(本评论即记录):#5086(三 mdx 的错包路径类型导入 —— 家族第二条的文档站镜像)、#5087(grid.mdx 键面 —— #5065 的镜像)、#5088(view.mdx 键面 —— #5077 的镜像)均 → 转 ready 并挂 auto-merge(squash)。 Generated by Claude Code |
Uh oh!
There was an error while loading. Please reload this page.
Fixes#5076
基线
origin/main@03e5f972a160998a694742bd7c72149ae2fa3d8e(卡面读数取自6098ecd08,本 PR 在03e5f972a上逐行复测,行号与判定完全一致)。前提复测:卡面四行照抄复核,全部成立
邻近词反查(全仓
git grep -nw)确认三个名字只出现在这三个 mdx 与三份已落地 changeset 的引述里,源码零命中。三文件判定表
6098ecd08/03e5f972a一致)dist/index.d.ts导出面content/docs/plugins/plugin-form.mdx:165/:168formComponentscontent/docs/plugins/plugin-grid.mdx:121/:124gridComponentscontent/docs/plugins/plugin-view.mdx:70/:73viewComponentscontent/docs/plugins/plugin-dashboard.mdx:73/:76dashboardComponentspackages/plugin-dashboard/src/index.tsx)content/docs/plugins/plugin-map.mdx归 #5019,未碰。content/docs/releases/**零触碰。未新增任何导出或 re-export。改法
与 README 侧已落地的三单同一口径(#5011 → PR #5079、#5013 → PR #5071、#5014 → PR #5078,先读了这三个 PR 的对应节作基准)。每处删掉虚构段,换成三节真话:
skipFallback语义;键表出处:从
ComponentRegistry.register(调用现场抄,⛔ 不从文档反推skipFallback语义来自packages/core/src/registry/Registry.ts:194(register签名),兜底分支在:226(if (meta?.namespace && !meta?.skipFallback))。全仓skipFallback: true在这三个包里只有三处:因此 plugin-view 的七处全部同时有 namespaced 键与 bare 兜底(页面里明写 "No call in this package sets
skipFallback"),plugin-form 与 plugin-grid 各有 bare 键被刻意让出 —— bareform留给@object-ui/components的基础表单,bareline_items留给别的认领者,baregrid留给packages/components/src/renderers/layout/grid.tsx:50的 CSS Grid 布局容器。名集合核对与探针
导出名逐一对已构建的
dist/index.d.ts核过,方法照 #5043 规格(TS 编译器 APIchecker.getExportsOfModule),不是 grep src。@object-ui/*具名导入 —— 改前 8 条不成立,改后 5 条(全部是本卡边界外、已另立卡的错包路径类型导入,见文末)。ObjectViewRenderer/SimpleViewRenderer不导出、formComponents/gridComponents不导出)—— 断言缺席与断言在场同样可证伪,同一趟跑。strict下对同一批dist/index.d.ts编译 ——TSC_EXIT=0。反向验证(预判先写,再跑)
(a) 改前 mdx 段回填 —— 预判:核对/探针必须抓出三个虚构名。符合。
改前整树跑名集合核对,预判 8 条(3 个虚构名 + 5 条错包路径),实测逐字命中:
改后剩 5 条,恰为边界外的错包路径类型导入(本 PR 不动,见文末)。
被删的那段逐字回填进探针,预判 TS2305,实测:
(b) 名集合塞假名自证 —— 预判:必须被抓。符合。 往 grid 的新示例块塞
gridComponentsRedux:随即还原,
git diff --stat回到 40/5,无残留。check-doc-component-types改前改后计数完全一致(632 code blocks / 558typeliterals / 469 registered / 89 exempted)。这不是本修复生效的证据 —— 该门禁核的是组件type值,不是 import 的名字,#5076 正文已指出这一族从它下面穿过去了。它的绿只说明本 PR 没有碰坏它;修复本身的证据是上面的名集合核对与 tsc 探针。门禁读数
node scripts/check-doc-component-types.mjsEvery documented component type is registered.(143 mdx / 632 blocks / 558 type literals / 659 registered keys;改前改后同数,见上)node scripts/check-doc-links.mjsLinks are valid across 13 scan roots.node scripts/check-control-bytes.mjsOK (scanned 4522 tracked text file(s); skipped 85 binary)grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]'pnpm exec turbo run type-check --concurrency=2(仓根)81 successful, 81 total@mdx-js/mdx@3.1.1){)重活一律经
flock -w 3600 /tmp/os-heavy-verify.lock+NODE_OPTIONS=--max-old-space-size=4096。changeset:门禁实测判定「不需要」
卡面判断
.mdx不随 npm 发布故不需要 changeset,以门禁实测为准而非沿用判断:changeset:check(check-changeset-fixed+check-changeset-no-major)同样绿。故本 PR 不带 changeset —— 是门禁明确判定不欠,不是省略。边界外发现(已另立 issue,本 PR 一行未动)
改写过程中名集合核对稳定抓到的、与本卡不同性质的缺陷,按 Prime Directive #10 另立、未认领、未打
finding标签(都是读者今天照抄就撞得上的具体缺陷,交 PM 分诊):import type从错误的包导入真实类型 —— 照抄即 TS2305(#5011/#5013/#5014 第二条的文档站镜像) #5086 —— 三页import type从错误的包导入真实类型(TS2305,非虚构名):plugin-form.mdx:251的FormSchema/FormField、plugin-grid.mdx:336的GridSchema/GridColumn、plugin-view.mdx:263的ObjectViewSchema。是 plugin-form README 教三个不存在的导入:formComponents手动注册、FormSchema/FormField从本包导入 #5011 / plugin-grid README 教gridComponents手动注册与GridSchema/GridColumn类型 —— 前两者不存在,GridSchema这个名字在 types 里是 CSS Grid #5013 / plugin-view README 教的viewComponents手动注册不存在,ObjectViewSchema也不从本包导出 #5014 第二条的文档站镜像,也正是本 PR 改后名集合核对剩下的那 5 条。type: 'grid'+header/accessorKey列词汇表 —— 落到 CSS Grid 布局容器,列声明被 strict 的 ListColumn 拒绝(#5065 的文档站镜像) #5087 ——plugin-grid.mdx整片示例的type: 'grid'(落到 CSS Grid 布局容器)与header/accessorKey列词汇表(被 strict 的ListColumn拒绝)。plugin-grid README 的 10 个示例块整片 schema 键面不成立 ——type: 'grid'落到布局容器,sortable / filterable / onRowClick 等零命中 #5065(README 侧)的文档站镜像,与渲染器侧的 finding(plugin-grid): ObjectGrid 在ObjectGridSchema.columns上容忍未声明的accessorKey/header拼写 —— 声明类型是 strict 的 ListColumn,#3104 的列身份门禁结构上看不见这条支路 #5068 同族不同层。object/viewMode/fields键面在 ObjectViewSchema 上一个都不成立(#5077 的文档站镜像) #5088 ——plugin-view.mdx整片示例的object/viewMode/fields键面在ObjectViewSchema上一个都不成立(必填的是objectName),照抄即空视图。plugin-view README 整片 schema 键面渲染器一个都不读 —— object / viewMode / fields / mode / recordId / fieldConfig 全非声明成员,照抄即空视图 #5077(README 侧)的文档站镜像。三者的修都不落在#5065 / #5077 的完成范围内(那两单的范围是
packages/*/README.md),故按 #5076 自身「为什么单立一卡」的同一理由独立立卡,而非挂为子 issue。立卡前已按关键词 + 文件路径检索过 open issues,未见孪生。