返回 oh-my-ppt
document-plan-page-skeleton.ts
根目录 / src / main / io / document-plan-page-skeleton.ts
1 import {
2 isInternalDocumentPlanPageReason,
3 type DocumentPlanPageSkeletonItem
4 } from '../../shared/generation'
5 import {
6 deriveOutlinePageCandidates,
7 type DocumentOutlinePageCandidate,
8 type DocumentOutlineScan
9 } from './document-outline-scan'
10
11 export const buildDocumentPlanPageSkeleton = (args: {
12 scan: DocumentOutlineScan | null
13 pageCandidates?: DocumentOutlinePageCandidate[]
14 pageCount: number
15 }): DocumentPlanPageSkeletonItem[] => {
16 if (!args.scan) return []
17 const candidates = args.pageCandidates ?? deriveOutlinePageCandidates(args.scan)
18 if (candidates.length === 0 || candidates.length !== args.pageCount) return []
19 return candidates.map((candidate, index) => ({
20 id: `page-${index + 1}`,
21 pageNumber: index + 1,
22 title: candidate.title,
23 role: candidate.role,
24 sourceHeading: candidate.sourceHeading,
25 headingLevel: candidate.headingLevel,
26 lineStart: candidate.lineStart,
27 lineEnd: candidate.lineEnd,
28 reason: candidate.reason
29 }))
30 }
31
32 export const sanitizeDocumentPlanPageSkeletonContent = (args: {
33 pageSkeleton: DocumentPlanPageSkeletonItem[]
34 }): DocumentPlanPageSkeletonItem[] => {
35 return args.pageSkeleton.map((item) => ({
36 ...item,
37 reason: item.reason && !isInternalDocumentPlanPageReason(item.reason) ? item.reason : ''
38 }))
39 }
40
40 lines TYPESCRIPT