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,15 +93,27 @@ 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(
|
||||||
|
JSON.stringify({
|
||||||
releases: releases.map((release) => {
|
releases: releases.map((release) => {
|
||||||
const parsed = parseMarkdown(release.body || "")
|
const parsed = parseMarkdown(release.body || "")
|
||||||
return {
|
return {
|
||||||
@@ -110,5 +125,12 @@ export async function GET() {
|
|||||||
sections: parsed.sections,
|
sections: parsed.sections,
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
}
|
}),
|
||||||
|
{
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Cache-Control": ok,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user