2026-11-01 20:05:48 -05:00
|
|
|
|
import fs from "node:fs";
|
|
|
|
|
|
|
|
|
|
|
|
const overrides = JSON.parse(fs.readFileSync(new URL("../resources/catalog-overrides.json", import.meta.url), "utf8"));
|
|
|
|
|
|
|
|
|
|
|
|
/** 把本项目已实现的参数契约覆盖到派生目录,避免重新生成时恢复旧的错误元数据。 */
|
|
|
|
|
|
export function applyCatalogOverrides(catalog) {
|
|
|
|
|
|
for (const component of catalog.components) {
|
|
|
|
|
|
const override = overrides[component.id];
|
|
|
|
|
|
if (!override) continue;
|
2026-11-05 04:53:07 -05:00
|
|
|
|
const { fields = {}, addFields = [], removeFields = [], ...metadata } = override;
|
2026-11-01 20:05:48 -05:00
|
|
|
|
Object.assign(component, metadata);
|
|
|
|
|
|
component.fields = component.fields.filter(field => !removeFields.includes(field.key))
|
|
|
|
|
|
.map(field => ({ ...field, ...fields[field.key] }));
|
2026-11-05 04:53:07 -05:00
|
|
|
|
// addFields:补源数据里缺失、但实现确实读取的字段(完整字段定义,key 重复则跳过)
|
|
|
|
|
|
if (addFields.length) {
|
|
|
|
|
|
const have = new Set(component.fields.map(f => f.key));
|
|
|
|
|
|
for (const f of addFields) {
|
|
|
|
|
|
if (f && f.key && !have.has(f.key)) component.fields.push(f);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2026-11-01 20:05:48 -05:00
|
|
|
|
}
|
|
|
|
|
|
catalog.counts.fields = catalog.components.reduce((count, component) => count + component.fields.length, 0);
|
|
|
|
|
|
return catalog;
|
|
|
|
|
|
}
|