import type { ChangelogRelease } from '@/lib/changelog'; import type { LatestReleaseInfo } from '@/lib/latestRelease'; type LandingLatestUpdates = { version: string; title: string; desc: string; link: string; items: string[]; }; const text = { en: { title: 'Latest updates', desc: 'Mirrored from the latest GitHub release notes.', link: 'Read the changelog', fallbackItems: [ 'Desktop and Docker release assets', 'Database workflow improvements', 'Bug fixes and reliability updates', 'Documentation and packaging updates', ], }, cn: { title: '最近更新', desc: '同步 GitHub 最新 Release Notes。', link: '查看更新日志', fallbackItems: [ '桌面版与 Docker 发布资产', '数据库工作流改进', '问题修复与稳定性更新', '文档与打包流程更新', ], }, }; function releaseItems(release: ChangelogRelease, lang: 'en' | 'cn') { const separator = lang === 'cn' ? ',' : ': '; return release.sections .flatMap((section) => section.items) .map((item) => (item.desc ? `${item.title}${separator}${item.desc}` : item.title)) .slice(0, 4); } export function buildLandingLatestUpdates( lang: 'en' | 'cn', release: ChangelogRelease | undefined, appVersion: string, latestRelease?: LatestReleaseInfo | null, ): LandingLatestUpdates { const t = text[lang]; const items = release ? releaseItems(release, lang) : []; const version = latestRelease?.version ? `v${latestRelease.version}` : release?.tag ?? `v${appVersion}`; return { version, title: t.title, desc: t.desc, link: t.link, items: items.length > 0 ? items : t.fallbackItems, }; }