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,52 @@
import type {
CompatibleTemplate,
ResolvedPage,
ResolvedPages,
RuntimeIssue,
SectionRole,
} from './runtime-contracts';
import { SINGLETON_SECTION_ROLES } from './runtime-contracts';
function createByRoleMap(): Partial<Record<SectionRole, ResolvedPage[]>> {
return {};
}
export function resolveTemplatePages(
compatibleTemplate: CompatibleTemplate,
): ResolvedPages {
const byRole = createByRoleMap();
const issues: RuntimeIssue[] = [...compatibleTemplate.issues];
const all: ResolvedPage[] = compatibleTemplate.pages.map((page) => ({ ...page }));
for (const page of all) {
for (const role of page.roles) {
const pages = byRole[role] ?? [];
pages.push(page);
byRole[role] = pages;
}
}
for (const [role, pages] of Object.entries(byRole) as Array<
[SectionRole, ResolvedPage[]]
>) {
if (!SINGLETON_SECTION_ROLES.has(role) || pages.length <= 1) {
continue;
}
issues.push({
code: 'DUPLICATE_MARKER',
severity: 'error',
message: 'PDF template resolves multiple singleton section pages.',
details: {
role,
pageIndexes: pages.map((page) => page.pageIndex),
},
});
}
return {
all,
byRole,
issues,
};
}