Commit 27b70c2
`FieldMapping.transform` —— 作者面上写作 `connector.fieldMappings[].transform`
与 `externalLookup.fieldMappings[].transform` —— 连同整个五成员
`FieldMappingTransform` 联合(`constant` / `cast` / `lookup` / `javascript` /
`map`)已在 @objectstack/spec 17.0.0 按 #5552 / ADR-0049 退役:五个成员没有任何
一个有执行器,`javascript` 成员还在推荐 #3278 已退役的 `js` dialect。文档 L303
示例块的墓碑注释早已写对,散文却没跟着改 —— 与 #5554 / PR #6388 同型,只是换了
一次退役。
正文点名一处(Key Features 打勾行),实测为四处,全部改为如实说法:
- L198 Key Features:打勾行 `With transformations and data type conversion`
—— `data type conversion` 那半是真的(`dataType`),`With transformations`
那半不是。⛔ 未删行,改为 `dataType` 目标类型 + `syncMode` 逐字段方向,并在
行内显式写出 **no value transformation**,另加引用块。这里用显式否定而非静默
删除:删掉只是不再重复该断言,消不掉读者已经形成的"连接器字段映射能做值转换"
这一信念 —— 而这个信念比编译不过更贵,它会把值转换逻辑规划到一个不执行它的面上。
- L287 示例块内注释:`// Field Mappings with Transformations.` —— 与 15 行后
自己的墓碑注释直接矛盾。改为 `dataType` / `syncMode`,并指向那条墓碑。
- L387 Decision Matrix:⛔ 未删行(joins/aggregations → L2 那半是对的)。原行只
问 `complex transformations`,想做逐字段值转换的作者不会把自己读进"complex",
于是落到 L3 —— 正是本 issue 描述的失败路径。改写为"是否需要转换值(无论复杂
与否)",并写明 **Not** L3。
- L430 Migration Guide L3→L2 引导语:同上,`complex transformations` →
"需要转换值(joins/aggregations,或 `fieldMappings` 做不到的逐字段转换)"。
措辞全部复用 `shared/mapping.zod.ts:89` 墓碑现成句,不另造第二种说法(同一次
退役出现两种描述,正是它们日后互相矛盾的成因)。
保留的每一条都对着 schema 核过,不是假定:
- `ConnectorFieldMappingSchema`(`connector.zod.ts:121`)= `BaseFieldMappingSchema
.extend({ dataType, required, syncMode })`,新增的确实只有这三个键;基类
`FieldMappingSchema`(`shared/mapping.zod.ts:72`)的 `transform` 是
`retiredKey(...)` 墓碑。故行文只说 schema **declares** `dataType`,不宣称运行时
执行 —— 无 `connector` liveness 记录可支撑执行侧断言。
- 墓碑指定的去处真实存在:`MappingSchema.fieldMapping`
(`data/mapping.zod.ts:224`)= `z.array(ImportFieldMappingSchema)`,其
`transform: TransformType.default('none')`(:140)+ `params`(:147);
`TransformType`(:84)含 `javascript`,而 REST import path 对它回 400 —— 故沿用
墓碑那份六成员列表 + "rejects `javascript` with a 400" 的补语,列表才是诚实的。
- `os migrate meta --from 16` 存在(`packages/cli/src/commands/migrate/meta.ts:146`),
且转换 `field-mapping-transform-removed` 的 `toMajor: 17`
(`conversions/registry.ts:4197`)—— `--from 16` 是对的入口。
纯散文改动,未新增/删除任何 ```typescript 块:`grep -c '^```typescript'` 实测仍
为 6,`etl-author-shape.test.ts` 与 `connector-author-shape.test.ts` 两个门禁
30 tests 实跑通过(非假定);packages/spec 全量 338 files / 8644 tests 亦通过。
`packages/spec/docs/` 不在该包 `package.json` 的 `files` 白名单
(`dist`/`json-schema`/`liveness`/`prompts`/`llms.txt`/`README.md`/
`src/**/*.zod.ts`/`CHANGELOG.md`/`api-surface`/`spec-changes.json`)内,不随包
发布,故不写 changeset,改用 `skip-changeset` 标签。
Fixes #6384
Claude-Session: https://claude.ai/code/session_014wsZeReNTqiceBfLb5Pyf5
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
1 parent 643b7c7 commit 27b70c2
1 file changed
Lines changed: 26 additions & 4 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
195 | 195 | | |
196 | 196 | | |
197 | 197 | | |
198 | | - | |
| 198 | + | |
| 199 | + | |
199 | 200 | | |
200 | 201 | | |
201 | 202 | | |
| |||
215 | 216 | | |
216 | 217 | | |
217 | 218 | | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
| 230 | + | |
| 231 | + | |
| 232 | + | |
| 233 | + | |
| 234 | + | |
| 235 | + | |
| 236 | + | |
| 237 | + | |
218 | 238 | | |
219 | 239 | | |
220 | 240 | | |
| |||
284 | 304 | | |
285 | 305 | | |
286 | 306 | | |
287 | | - | |
| 307 | + | |
| 308 | + | |
288 | 309 | | |
289 | 310 | | |
290 | 311 | | |
| |||
384 | 405 | | |
385 | 406 | | |
386 | 407 | | |
387 | | - | |
| 408 | + | |
388 | 409 | | |
389 | 410 | | |
390 | 411 | | |
| |||
427 | 448 | | |
428 | 449 | | |
429 | 450 | | |
430 | | - | |
| 451 | + | |
| 452 | + | |
431 | 453 | | |
432 | 454 | | |
433 | 455 | | |
| |||
0 commit comments