chore: stale-while-revalidate headers for changelog
This commit is contained in:
@@ -20,6 +20,9 @@ type HighlightGroup = {
|
|||||||
items: HighlightItem[]
|
items: HighlightItem[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const ok = "public, max-age=1, s-maxage=300, stale-while-revalidate=86400, stale-if-error=86400"
|
||||||
|
const error = "public, max-age=1, s-maxage=60, stale-while-revalidate=600, stale-if-error=86400"
|
||||||
|
|
||||||
function parseHighlights(body: string): HighlightGroup[] {
|
function parseHighlights(body: string): HighlightGroup[] {
|
||||||
const groups = new Map<string, HighlightItem[]>()
|
const groups = new Map<string, HighlightItem[]>()
|
||||||
const regex = /<highlight\s+source="([^"]+)">([\s\S]*?)<\/highlight>/g
|
const regex = /<highlight\s+source="([^"]+)">([\s\S]*?)<\/highlight>/g
|
||||||
@@ -90,25 +93,44 @@ export async function GET() {
|
|||||||
Accept: "application/vnd.github.v3+json",
|
Accept: "application/vnd.github.v3+json",
|
||||||
"User-Agent": "OpenCode-Console",
|
"User-Agent": "OpenCode-Console",
|
||||||
},
|
},
|
||||||
})
|
cf: {
|
||||||
|
// best-effort edge caching (ignored outside Cloudflare)
|
||||||
|
cacheTtl: 60 * 5,
|
||||||
|
cacheEverything: true,
|
||||||
|
},
|
||||||
|
} as any)
|
||||||
|
|
||||||
if (!response.ok) {
|
if (!response.ok) {
|
||||||
return { releases: [] }
|
return new Response(JSON.stringify({ releases: [] }), {
|
||||||
|
status: 503,
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Cache-Control": error,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
const releases = (await response.json()) as Release[]
|
const releases = (await response.json()) as Release[]
|
||||||
|
|
||||||
return {
|
return new Response(
|
||||||
releases: releases.map((release) => {
|
JSON.stringify({
|
||||||
const parsed = parseMarkdown(release.body || "")
|
releases: releases.map((release) => {
|
||||||
return {
|
const parsed = parseMarkdown(release.body || "")
|
||||||
tag: release.tag_name,
|
return {
|
||||||
name: release.name,
|
tag: release.tag_name,
|
||||||
date: release.published_at,
|
name: release.name,
|
||||||
url: release.html_url,
|
date: release.published_at,
|
||||||
highlights: parsed.highlights,
|
url: release.html_url,
|
||||||
sections: parsed.sections,
|
highlights: parsed.highlights,
|
||||||
}
|
sections: parsed.sections,
|
||||||
|
}
|
||||||
|
}),
|
||||||
}),
|
}),
|
||||||
}
|
{
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Cache-Control": ok,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user