项目文件夹

文件
2026-07-13 13:09:14 +08:00

49 行
1.6 KiB
TypeScript

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,
};
}