mirror of
https://github.com/hanzoai/shadcn.git
synced 2026-10-30 18:22:59 +00:00
Squash merge of shadcn-ui/ui main branch into hanzo/ui, bringing in: - [email protected] through [email protected] releases - New apps/v4 directory structure - Registry system improvements and MCP server - Framework support (Vue, Svelte, React Native) - New templates (vite-app, monorepo-next, laravel) - Zod 4 compatibility (scoped override for zod@>4) - Test fixture corrections for alias resolution All 867 merge conflicts resolved preserving Hanzo customizations. 1020/1020 shadcn tests pass.
51 lines
1.2 KiB
TypeScript
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
|
|
})
|
|
}
|