现象
packages/spec/scripts/build-schemas.ts:200 把导出常量名转成 JSON Schema 名时用的是字符串 replace,不是后缀正则:
const schemaName = key . endsWith ( 'Schema' ) ? key . replace ( 'Schema' , '' ) : key ;
String.prototype.replace(string, …) 只替换第一处 出现。常量名里 Schema 出现在前缀或中间时,被剥掉的就不是后缀,而是名字里面的那一段。目前受影响的 4 个:
导出常量
实际生成的 schema 名
正确的名字
SchemaModeSchema (src/data/datasource.zod.ts:440)
data/ModeSchema
data/SchemaMode
SchemaChangeSchema (src/system/deploy-bundle.zod.ts:46)
system/ChangeSchema
system/SchemaChange
SchemaLevelIsolationStrategySchema (src/system/tenant.zod.ts:376)
system/LevelIsolationStrategySchema
system/SchemaLevelIsolationStrategy
DocumentSchemaValidationSchema (src/data/driver-nosql.zod.ts:119)
data/DocumentValidationSchema
data/DocumentSchemaValidation
影响面
这个名字不是内部细节,它同时是三处对外表面:
$id:https://schema.objectstack.io/v17/data/ModeSchema.json —— 一个并不存在的类型名,IDE 自动补全和外部引用都会拿到它;
json-schema.manifest.json 的棘轮条目(已记录了这 4 个错名);
content/docs/references/ 的页面小节标题与 import 示例 —— 在 build-docs.ts 用「剥掉 Schema 后缀」推导 import type 示例,类型别名不存在时生成的文档引用无法编译 #4570 的修复之后,这 4 个名字在真实导出面里查无此名,于是被从 import 行里剔除,并作为 4 条 no schema const export 记进 packages/spec/docs-import-surface.baseline.json。也就是说这 4 个 schema 现在有文档页、但页面给不出任何 import 示例。
建议
改成 key.replace(/Schema$/, ''),然后 gen:schema + gen:docs + gen:api-surface 重跑,并把 json-schema.manifest.json 里 4 条旧键换成新键(属于 #2978 说的「有意退役」范畴,要在 PR 里说明),同时把 docs-import-surface.baseline.json 里对应的 4 条 no schema const export 删掉(该 baseline 是只减不增的棘轮,修好后必须删行,否则 check:docs 会因为陈旧条目变红)。
发现于 #4570 。
现象
packages/spec/scripts/build-schemas.ts:200把导出常量名转成 JSON Schema 名时用的是字符串 replace,不是后缀正则:String.prototype.replace(string, …)只替换第一处出现。常量名里Schema出现在前缀或中间时,被剥掉的就不是后缀,而是名字里面的那一段。目前受影响的 4 个:SchemaModeSchema(src/data/datasource.zod.ts:440)data/ModeSchemadata/SchemaModeSchemaChangeSchema(src/system/deploy-bundle.zod.ts:46)system/ChangeSchemasystem/SchemaChangeSchemaLevelIsolationStrategySchema(src/system/tenant.zod.ts:376)system/LevelIsolationStrategySchemasystem/SchemaLevelIsolationStrategyDocumentSchemaValidationSchema(src/data/driver-nosql.zod.ts:119)data/DocumentValidationSchemadata/DocumentSchemaValidation影响面
这个名字不是内部细节,它同时是三处对外表面:
$id:https://schema.objectstack.io/v17/data/ModeSchema.json—— 一个并不存在的类型名,IDE 自动补全和外部引用都会拿到它;json-schema.manifest.json的棘轮条目(已记录了这 4 个错名);content/docs/references/的页面小节标题与 import 示例 —— 在 build-docs.ts 用「剥掉 Schema 后缀」推导 import type 示例,类型别名不存在时生成的文档引用无法编译 #4570 的修复之后,这 4 个名字在真实导出面里查无此名,于是被从 import 行里剔除,并作为 4 条no schema const export记进packages/spec/docs-import-surface.baseline.json。也就是说这 4 个 schema 现在有文档页、但页面给不出任何 import 示例。建议
改成
key.replace(/Schema$/, ''),然后gen:schema+gen:docs+gen:api-surface重跑,并把json-schema.manifest.json里 4 条旧键换成新键(属于 #2978 说的「有意退役」范畴,要在 PR 里说明),同时把docs-import-surface.baseline.json里对应的 4 条no schema const export删掉(该 baseline 是只减不增的棘轮,修好后必须删行,否则check:docs会因为陈旧条目变红)。发现于 #4570。