baodan/baodanppt/scripts/test_template_clone_config.ts

39 lines
1.4 KiB
TypeScript

import { loadTemplateCatalog } from "../src/config/template-catalog.ts";
import { listTemplateAssets } from "../src/config/template-assets.ts";
import { hasSavingsCloneRenderer } from "../src/templates/clone-renderer-registry.ts";
type Issue = { templateId: string; issue: string };
function main() {
const templates = loadTemplateCatalog();
const assets = new Set(listTemplateAssets().map((a) => a.id));
const issues: Issue[] = [];
for (const t of templates) {
if (!t.sourceTemplateAssetId) continue;
if (!assets.has(t.sourceTemplateAssetId)) {
issues.push({ templateId: t.id, issue: `missing sourceTemplateAssetId index: ${t.sourceTemplateAssetId}` });
}
if (t.cloneReady) {
if (!t.cloneRenderer) {
issues.push({ templateId: t.id, issue: "cloneReady=true but cloneRenderer is empty" });
} else if (t.planType === "savings" && !hasSavingsCloneRenderer(t.cloneRenderer)) {
issues.push({ templateId: t.id, issue: `unknown savings cloneRenderer: ${t.cloneRenderer}` });
}
}
if (!t.cloneReady && t.cloneRenderer) {
issues.push({ templateId: t.id, issue: "cloneReady=false but cloneRenderer set; keep config explicit" });
}
}
if (issues.length) {
console.error(JSON.stringify({ status: "failed", issueCount: issues.length, issues }, null, 2));
process.exit(1);
}
console.log(JSON.stringify({ status: "ok", templateCount: templates.length }, null, 2));
}
main();