This repository has no description
1<script lang="ts">
2 import { resolve } from "$app/paths";
3 import type { DiffFile, DiffStat } from "$lib/api/diff";
4 import type { CommitDetail } from "$lib/api/repo";
5 import { FULL_HASH_RE } from "$lib/api/repo";
6 import CommitHeader from "./CommitHeader.svelte";
7 import DiffView from "./DiffView.svelte";
8 import type { DiffStyle } from "./pierre";
9 import TabPanel from "$lib/components/ui/TabPanel.svelte";
10
11 interface Props {
12 ownerHandle: string;
13 repoName: string;
14 // the ref the page was loaded with. raw downloads only work for full hashes
15 ref: string;
16 commit: CommitDetail;
17 // hex of the first parent, empty for a root commit
18 parent?: string;
19 changeId?: string;
20 files: DiffFile[];
21 stat?: DiffStat;
22 // side-by-side or stacked
23 diffStyle?: DiffStyle;
24 // server-prerendered shadow dom per row key, only for the initial ssr
25 prerendered?: Record<string, string>;
26 }
27
28 let {
29 ownerHandle,
30 repoName,
31 ref,
32 commit,
33 parent = "",
34 changeId = "",
35 files,
36 stat,
37 diffStyle = "unified",
38 prerendered
39 }: Props = $props();
40
41 const base = $derived(`/${ownerHandle}/${repoName}`);
42
43 // the raw commit route only accepts full sha1/sha256 hex, anything shorter 404s
44 const downloadUrls = $derived(
45 FULL_HASH_RE.test(ref)
46 ? {
47 patch: resolve(`${base}/commit/${ref}.patch` as "/"),
48 diff: resolve(`${base}/commit/${ref}.diff` as "/")
49 }
50 : undefined
51 );
52 const blobBase = $derived(resolve(`${base}/blob/${encodeURIComponent(ref)}` as "/"));
53</script>
54
55<div class="flex flex-col gap-4">
56 <TabPanel>
57 <CommitHeader {ownerHandle} {repoName} {commit} {parent} {changeId} />
58 </TabPanel>
59 <DiffView {files} {stat} {diffStyle} {downloadUrls} {blobBase} {prerendered} />
60</div>