实施 #5775(维护者裁决方向 A)时,为核实 A 表前提对 objectui HEAD 7dfbeb7 逐行读了 element:record_picker 的 renderer,顺带测出一处 A 表没有记录的同类分歧。#5775 的裁决评论逐键点名了处置对象,sort / limit 不在其中,所以没有夹带进那个 PR —— 单独记在这里。
实测
packages/components/src/renderers/basic/record-picker.tsx(objectui 7dfbeb7):
constds=(schema?.dataSource??{})as{object?: string;filter?: unknown;sort?: unknown;limit?: number};constobject=ds.object??props.object;constfilter=ds.filter??props.filter;constsort=ds.sort??props.sort;// ← props.sort 未声明constlimit=ds.limit??props.limit??50;// ← props.limit 未声明四个键都走同一个「dataSource 优先、扁平简写兜底」的模式,而 ComponentPropsMap 里(#5775 落地后)object 与 filter已声明、sort 与 limit未声明。也就是说同一个 renderer 的同一组兜底里,一半是契约、一半是暗门 —— 一个照着 object/filter 的写法推断出 properties.limit: 20 的作者,会拿到默认的 50 条,零诊断。这正是 ADR-0078 的形状,和 #5775 处理的 labelField 同族。
仓内暂无作者写扁平 sort/limit(showcase 的 page-variables.page.ts:61 走的是 dataSource: { object, limit: 50 },即已声明的那条路),所以今天不打红任何东西 —— 但它是 #5068 error 升级前该清空的同一份清单上的一条。
三个方向(需裁定,不建议顺手补声明)
注:B 的正确范围恐怕不止 picker —— packages/lint/src/validate-component-props.ts 里那条「dataSource 供给了 object 就不报缺失」的豁免正是为这一族写的。所以本单若走 B,应先扩成 element 家族的统一单。
关系
实施 #5775(维护者裁决方向 A)时,为核实 A 表前提对 objectui HEAD
7dfbeb7逐行读了element:record_picker的 renderer,顺带测出一处 A 表没有记录的同类分歧。#5775 的裁决评论逐键点名了处置对象,sort/limit不在其中,所以没有夹带进那个 PR —— 单独记在这里。实测
packages/components/src/renderers/basic/record-picker.tsx(objectui7dfbeb7):四个键都走同一个「
dataSource优先、扁平简写兜底」的模式,而ComponentPropsMap里(#5775 落地后)object与filter已声明、sort与limit未声明。也就是说同一个 renderer 的同一组兜底里,一半是契约、一半是暗门 —— 一个照着object/filter的写法推断出properties.limit: 20的作者,会拿到默认的 50 条,零诊断。这正是 ADR-0078 的形状,和 #5775 处理的labelField同族。仓内暂无作者写扁平
sort/limit(showcase 的page-variables.page.ts:61走的是dataSource: { object, limit: 50 },即已声明的那条路),所以今天不打红任何东西 —— 但它是 #5068 error 升级前该清空的同一份清单上的一条。三个方向(需裁定,不建议顺手补声明)
sort/limit,与object/filter对齐 —— 四个扁平简写要么都是契约、要么都不是。代价:把「组件级dataSource是数据绑定的正统位置」这件事又稀释一次。dataSource成为唯一入口,object/filter的扁平简写也走 ADR-0087 退役,四个键一起收敛到dataSource。契约最干净;代价:breaking 面比 A 大得多,且object的扁平写法在语料里是主流(element:form/element:filter等兄弟 element 也都是扁平object),需要一次跨 element 的统一裁决而不是只看 picker。dataSource的.describe()里写明「sort/limit只能从这里给」。代价:ADR-0049 的债务原地不动,且和 SDUI props 声明与 renderer 不一致:6 处「renderer 兑现但 ComponentPropsMap 未声明」+ 2 处「声明了没人读」(#5068 error 升级的 spec 侧前置) #5775 刚刚确立的「以被兑现的形状为准」相矛盾。注:B 的正确范围恐怕不止 picker ——
packages/lint/src/validate-component-props.ts里那条「dataSource供给了object就不报缺失」的豁免正是为这一族写的。所以本单若走 B,应先扩成 element 家族的统一单。关系
displayField(退役)/labelField·valueField·label·emptyText(补声明),sort/limit不在裁决点名范围内,故拆出。PageComponent.properties是开放 record,ComponentPropsMap的 29 个站点从不被 parse(#4001 批 17 的 no gate 判定) #5068:error 升级的 warning 期清单。本单属该清单的 spec 侧剩余项。