Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 39 additions & 5 deletions src/starlightRouteData.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,50 @@
import { defineRouteMiddleware } from "@astrojs/starlight/route-data";
import { defineRouteMiddleware, type StarlightRouteData } from "@astrojs/starlight/route-data";

const indexPagePath = /^\/release-notes\/(?:\d+\/)?$/;
const versionPagePath = /^\/release-notes\/version\/firefox-(?<version>[^/]+)\/$/;

export const onRequest = defineRouteMiddleware((context) => {
const version = context.url.pathname.match(versionPagePath)?.groups?.version;
// Skip the `154...latest` comparison pages, which cover a range of releases.
if (!version || version.includes("...")) return;
// The release notes pages are generated by starlight-changelogs, which sets
// no description, so add the meta tags a docs page gets from its frontmatter.
function setDescription(starlightRoute: StarlightRouteData, description: string) {
starlightRoute.entry.data.description = description;
starlightRoute.head.push(
{ tag: "meta", attrs: { name: "description", content: description } },
{ tag: "meta", attrs: { property: "og:description", content: description } },
);
}

export const onRequest = defineRouteMiddleware((context) => {
const { starlightRoute } = context.locals;
const { pathname } = context.url;

if (indexPagePath.test(pathname)) {
setDescription(
starlightRoute,
"New policies, policy changes and fixes for enterprise admins in each Firefox and Firefox ESR release.",
);
return;
}

const version = pathname.match(versionPagePath)?.groups?.version;
if (!version) return;

// The `154...latest` comparison pages cover a range of releases, so keep their title.
if (version.includes("...")) {
const from = version.split("...")[0];
setDescription(
starlightRoute,
`New policies, policy changes and fixes for enterprise admins from Firefox ${from} to the latest release.`,
);
return;
}

const title = `Firefox ${version} release notes for enterprise admins`;

starlightRoute.entry.data.title = title;
setDescription(
starlightRoute,
`New policies, policy changes and fixes for enterprise admins in Firefox ${version} and the matching Firefox ESR release.`,
);

for (const tag of starlightRoute.head) {
if (tag.tag === "title") {
Expand Down
Loading