aboutsummaryrefslogtreecommitdiff
path: root/src/app.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/app.ts')
-rw-r--r--src/app.ts12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/app.ts b/src/app.ts
index 9a7ee8e..81e47fd 100644
--- a/src/app.ts
+++ b/src/app.ts
@@ -155,12 +155,18 @@ export function createApp(eta: Eta) {
// be visited directly. Keep the site's initial page loads plain server-
// rendered HTML while still surfacing data (branches/tags, latest commit)
// that would otherwise require an extra scrape on every page view.
- app.get("/api/:owner/:repo/refs/:type", async (c) => {
- const { owner, repo, type } = c.req.param();
+ // The view and path are where the picker was opened, so each ref can link to
+ // the same page on another ref.
+ app.get("/api/:owner/:repo/refs/:type/:view/:path{.*}?", async (c) => {
+ const { owner, repo, type, view, path = "" } = c.req.param();
if (type !== "branches" && type !== "tags") {
return c.notFound();
}
- return tryRenderFragment(c, "_refs.eta", getGitHubRefs(owner, repo, type));
+ if (view !== "tree" && view !== "blob" && view !== "commits") {
+ return c.notFound();
+ }
+ const refs = getGitHubRefs(owner, repo, type).then((data) => ({ ...data, view, path }));
+ return tryRenderFragment(c, "_refs.eta", refs);
});
app.get("/api/:owner/:repo/latest-commit/:branch/:path{.*}?", async (c) => {