taks-p.4.3

This commit is contained in:
phaichayon
2026-06-29 11:18:08 +07:00
parent 2540d52670
commit 0c0450b152
20 changed files with 4900 additions and 505 deletions

View File

@@ -0,0 +1,45 @@
import type {
BuiltSection,
RenderContext,
RuntimeIssue,
SectionBuilder,
} from './runtime-contracts';
import { SECTION_ORDER } from './runtime-contracts';
export interface SectionComposerResult {
sections: BuiltSection[];
issues: RuntimeIssue[];
}
export async function composeSections(
context: RenderContext,
builders: SectionBuilder[],
): Promise<SectionComposerResult> {
const builderByRole = new Map(builders.map((builder) => [builder.role, builder]));
const sections: BuiltSection[] = [];
const issues: RuntimeIssue[] = [];
for (const role of SECTION_ORDER) {
const policy = context.policyBySection.get(role);
if (!policy?.enabled) {
continue;
}
const builder = builderByRole.get(role);
if (!builder) {
issues.push({
code: 'INVALID_TEMPLATE',
severity: policy.required ? 'error' : 'warning',
message: 'No section builder is registered for an enabled section.',
details: { role },
});
continue;
}
const section = await builder.build(context);
sections.push(section);
issues.push(...section.issues);
}
return { sections, issues };
}