Files
upstream-shadcn-ui/apps/v4/lib/changelog.ts
upstream-mirror 1416db152c
All checks were successful
Release / Create Version PR or Publish Stable Release (push) Has been skipped
Release / Publish Prerelease to NPM (push) Has been skipped
Monitor Registries / Monitor registry health (push) Has been skipped
snapshot of https://github.com/shadcn-ui/ui.git (main, 2026-09-15; blobs > 131072B omitted)
2026-09-15 22:44:43 +05:00

51 lines
1.2 KiB
TypeScript

import fs from "fs"
import path from "path"
import fm from "front-matter"
import { source } from "@/lib/source"
export type ChangelogPageData = {
title: string
description?: string
}
export type ChangelogPage = ReturnType<typeof source.getPages>[number] & {
date: Date | null
}
// Reads the date from the frontmatter of a changelog file.
export function getDateFromFile(slugs: string[]) {
const filePath = path.join(
process.cwd(),
"content/docs",
...slugs.slice(0, -1),
`${slugs[slugs.length - 1]}.mdx`
)
try {
const content = fs.readFileSync(filePath, "utf-8")
const { attributes } = fm<{ date?: string | Date }>(content)
if (attributes.date) {
return new Date(attributes.date)
}
} catch {
// File not found or parse error.
}
return null
}
// Gets all changelog pages sorted by date descending.
export function getChangelogPages() {
return source
.getPages()
.filter((page) => page.slugs[0] === "changelog" && page.slugs.length > 1)
.map((page) => ({
...page,
date: getDateFromFile(page.slugs),
}))
.sort((a, b) => {
const dateA = a.date?.getTime() ?? 0
const dateB = b.date?.getTime() ?? 0
return dateB - dateA
})
}