import type { ReviewState, ReviewerVerdict } from '../shared/types.js'; import type { ListPr } from './github/queries.js'; export function deriveReviewState(pr: ListPr): { reviewState: ReviewState; unresolvedThreads: number; totalThreads: number; } { const totalThreads = pr.reviewThreads.totalCount; const unresolvedThreads = pr.reviewThreads.nodes.filter((t) => !t.isResolved).length; let reviewState: ReviewState; if (pr.reviews.totalCount === 0 && totalThreads === 0) reviewState = 'no_review'; else if (unresolvedThreads > 0) reviewState = 'outstanding'; else reviewState = 'addressed'; return { reviewState, unresolvedThreads, totalThreads }; } export function deriveVerdicts(pr: ListPr): ReviewerVerdict[] { const author = pr.author?.login; return pr.latestReviews.nodes .filter( (r): r is typeof r & { state: 'APPROVED' | 'CHANGES_REQUESTED' } => (r.state === 'APPROVED' || r.state === 'CHANGES_REQUESTED') && r.author?.login !== undefined && r.author.login !== author, ) .map((r) => ({ reviewer: r.author!.login, state: r.state, url: r.url, submittedAt: r.submittedAt, })); }