Repository navigation
[Bug][配置] Config schema 里用 .default(...) 会让合并后的 row 配置变成未解析的 schema 对象(dsh 0.2.0-rc.2) #8656
Linjiangxian0203
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
环境
Config,并在cordis.patch.yml里给自己的 row 设了config现象
插件导出的
Config里,只要字段带.default(...),那么 profile 补丁层(或插件自带 patch)写给该 row 的config值全部丢失:apply(ctx, config)收到的是未解析的 schema 对象(JSON.stringify后是{}),静默无报错。最小复现
cordis.patch.yml写入 row config:cordis.patch.yml覆盖(profile 补丁层在 bundle 层之后):apply里打印收到的配置:实测结果(同一套 patch,只改 schema 写法)
apply收到的 config.default(...){"openIn":{},"dock":{}}← 配置值变成未解析的 schema 对象.default()){"openIn":"panel","dock":false}✅其它变量固定不变(同一隔离
DSH_HOME、同一份 profile patch、同一运行时),只改 schema 写法就能稳定复现。另外验证过:导出的 schema 是合法的原生 schemastery(运行时投影检查要求的三项
Symbol.for("schemastery") === true、type === "object"、meta为对象全部通过)。期望行为
Config的默认值只应补齐缺失字段;显式写进 rowconfig(以及被 profile 补丁层覆盖)的值应当原样传给apply。如果这是有意行为,请在文档里写明"Config schema 不要带 default"或给出正确用法。
影响
任何"导出 Config 且用
.default()"的第三方插件,row 配置都会静默失效(不报错,只拿到{}),用户会以为"我配了但没生效" —— 排查成本很高。
临时规避
schema 里只写纯类型,默认值改在代码里兜底,并且把每个键显式写进 row 的
config,这样 profile 补丁层才能覆盖到它们。
All reactions