// User-facing release notes: one entry per released version, newest first, as text in // content/release-notes/.json rather than code, so the dialog loads only the UI language's file // and only when it opens. A note says what a user notices, under "new" or "fixed", each item a // sentence or two; internal work is not listed. Internal work never ships on its own either (owner // decision): it waits for the next release a user can see, so the newest entry always has an item. // releaseNotes.test.ts holds that, the version against VERSION, the length and the HU/EN parity, and // scripts/gen-changelog.mjs renders the English file as CHANGELOG.md. export interface ReleaseEntry { version: string; date: string; // ISO date (YYYY-MM-DD) sha?: string; // short commit the release was tagged from new: string[]; fixed: string[]; } export type NotesLang = "en" | "hu"; export function notesLang(uiLanguage: string): NotesLang { return uiLanguage.startsWith("hu") ? "hu" : "en"; } export async function loadReleaseNotes(lang: NotesLang): Promise { const mod = lang === "hu" ? await import("../content/release-notes/hu.json") : await import("../content/release-notes/en.json"); return mod.default as ReleaseEntry[]; } /** An older release that only carried internal work has nothing to show (it is kept for the * changelog, which says so). */ export function visibleNotes(all: ReleaseEntry[]): ReleaseEntry[] { return all.filter((r) => r.new.length > 0 || r.fixed.length > 0); }